OrderSend - Търговски функции - Справочник за MQL4
Основната функция, използвана за извършване на сделки или поставяне на чакаща поръчка.
[in] Името на финансовия инструмент, с който се извършва търговската операция.
[in] Търговска операция. Може да бъде всяка от стойностите на търговската операция.
[in] Брой партиди.
[in] Начална цена.
[in] Максимално допустимо отклонение на цената за пазарни поръчки (поръчки за покупка или продажба).
[in] Цена на затваряне на поръчката при достигане на нивото на загуба (0, ако няма ниво на загуба).
[in] Цена на затваряне на поръчката при достигане на нивото на печалба (0, ако няма ниво на печалба).
[in] Магическо число на поръчката. Може да се използва като дефиниран от потребителя идентификатор.
[in] Дата на изтичане на чакащата поръчка.
[in] Цвят на началната стрелка на диаграмата. Ако параметърът липсва или стойността му е равна на CLR_NONE, тогава стрелката за отваряне не се показва на графиката.
Връща номера на билета, присвоен на поръчката от търговския сървър или -1 в случай на грешка. За да получите информация за грешка, трябва да извикате функцията GetLastError().
При отваряне на пазарна поръчка (OP_SELL или OP_BUY), само най-новите цени Bid (продава) или Ask (купува) могат да се използват като цена на отваряне. Ако операцията се извършва върху финансов инструмент, различен от текущия, тогава за да получите най-новите котировки за този инструмент, използвайте функцията MarketInfo() с параметъра MODE_BID или MODE_ASK.
Не можете да използвате калкулирана или ненормализирана цена. Ако заявената отворена цена не е била в ценовия поток или заявената цена не е нормализирана според броя на десетичните знаци, тогаваГенерирана е грешка 129 (ERR_INVALID_PRICE). Ако заявената цена на отваряне е много остаряла, тогава независимо от стойността на параметъра за приплъзване, ще се генерира грешка 138 (ERR_REQUOTE). Ако заявената цена е остаряла, но все още присъства в ценовия поток, тогава поръчката се отваря на текущата цена и само ако текущата цена попада в диапазона цена + приплъзване.
Цените на StopLoss и TakeProfit не могат да бъдат твърде близки до пазарните. Минималното спиране в точки може да се получи с помощта на функцията MarketInfo() с параметъра MODE_STOPLEVEL. Грешка 130 (ERR_INVALID_STOPS) се генерира при погрешни, както и при ненормализирани спирания. Нулевата стойност на MODE_STOPLEVEL означава или че няма ограничение за минималното разстояние за стоп загуба/тейк печалба, или че търговският сървър използва външни механизми за динамичен контрол на нивото, които не могат да бъдат преведени в терминала. Във втория случай GetLastError() може да върне грешка 130, защото нивото MODE_STOPLEVEL всъщност е "плаващо".
При поставяне на отложена поръчка цената на отваряне не може да бъде твърде близка до пазарната. Минималното разстояние на чакащата цена от текущата пазарна цена в пунктове може също да бъде получено с помощта на функцията MarketInfo() с параметъра MODE_STOPLEVEL. В случай на неправилна цена на отваряне на отложена поръчка, ще се генерира грешка 130 (ERR_INVALID_STOPS).
Някои сървъри за търговия може да забранят използването на дати на изтичане на чакащи поръчки. В този случай опитът за задаване на ненулева стойност в параметъра за изтичане ще генерира грешка 147 (ERR_TRADE_EXPIRATION_DENIED).
Някои сървъри за търговия може да имат ограничение за общия брой отворени и чакащи поръчки. ПриАко този лимит бъде надвишен, нова поръчка няма да бъде отворена (няма да бъде поставена чакаща поръчка) и търговският сървър ще върне грешка 148 (ERR_TRADE_TOO_MANY_ORDERS).
//+------------------------------------------------------------------+ // Функция за стартиране на програма на скрипт //+------------------------------------------------------------------+ void OnStart () < //--- вземете минималната стойност на Stop level double minstoplevel= MarketInfo ( Symbol (), MODE_STOPLEVEL ); Print( "Minimum Stop Level=" ,minstoplevel, "points"); двойна цена= Попитайте ; //--- изчислените стойности на SL и TP цените трябва да бъдат нормализирани double stoploss= NormalizeDouble ( Bid -minstoplevel* Point , Digits ); double takeprofit= NormalizeDouble (Bid +minstoplevel* Point, Digits); //--- подайте пазарна поръчка за закупуване на 1 лот int ticket= OrderSend ( Symbol (), OP_BUY ,1,price,3,stoploss,takeprofit, "Моята поръчка" ,16384,0, clrGreen); if (ticket < Print ( "OrderSend неуспешно с грешка #" , GetLastError ()); > else Print ( "OrderSend функцията е завършена успешно" ); //--- >