Лимитные ордера (помогите новичку)

 

Сейчас у меня исполнения по рыночным ордерам:

             ticket.buy = OrderSend (Symbol(), OP_BUY, Lot, NormalizeDouble(Ask, Digits), 3,
                                   Ask-(Point*StopLoss), Ask+(Point*TakeProfit), "_"+Symbol(), _MagicNumber, Lime);

Хочу выставлять лимитный ордер на уровне отступа половины тейк-профита от текущей цены.

Пишу так:

	         ticket.buy = OrderSend (Symbol(), OP_BUYLIMIT, Lot, NormalizeDouble(Ask-(Point*TakeProfit/2), Digits), 3, 
                                   Ask-(Point*StopLoss), Ask+(Point*TakeProfit), "_"+Symbol(), _MagicNumber, Lime);

И чего-то не работает оно. Не выставляются ордера. В журнале ошибка 3.

Чего не так делаю? Как поправить?


П.С.

Значения StopLoss=100, TakeProfit=100

ДЦ 4 знака







 
Это в качестве экстренной помощи: https://book.mql4.com/ru/appendix/errors
 

SL, во втором случае, уже не от настоящего Ask-а будет вычисляться, а от уровня открытия отложенника (т.е. от уровня Ask-(Point*TakeProfit/2)).

К TP то же самое относится.

 

К экстренной помощи обращался, не помогло. Уж больно расплывчат диагноз "Неправильные параметры".


Подозреваю, что ошибка где-то в выражении

NormalizeDouble(Ask-(Point*TakeProfit/2), Digits)

Но на мой взгляд всё правильно.


Без TP и SL эфеект тот-же. Ничего не понимаю. ):

	         ticket.buy = OrderSend (Symbol(), OP_BUYLIMIT, Lot, NormalizeDouble(Ask-(Point*TakeProfit/2), Digits), 3, 
                                   0, 0, "_"+Symbol(), _MagicNumber, Lime);
 
NIN писал(а) >>

К экстренной помощи обращался, не помогло. Уж больно расплывчат диагноз "Неправильные параметры".

Подозреваю, что ошибка где-то в выражении

Но на мой взгляд всё правильно.

Без TP и SL эфеект тот-же. Ничего не понимаю. ):

У меня такие же глюки были. С тех пор я даже лоты нормализую. Только, конечно, не Digits.

 
NIN >>:

К экстренной помощи обращался, не помогло. Уж больно расплывчат диагноз "Неправильные параметры".


Подозреваю, что ошибка где-то в выражении

Но на мой взгляд всё правильно.


Без TP и SL эфеект тот-же. Ничего не понимаю. ):

	  ticket.buy = OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(Ask-(TakeProfit/2)*Point, Digits),3*Point, 
          NormalizeDouble(Ask-(TakeProfit/2)*Point, Digits)-Point*StopLoss,NormalizeDouble(Ask-(TakeProfit/2)*Point, Digits)+Point*TakeProfit,"_"+Symbol(), _MagicNumber, Lime);
 

Без изменений. Всё так же OrderSend error 3

Может я ещё что-то где-то не так сделал?

 
OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, 
string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) 

// пример
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-25*Point,Ask+25*Point,"My order #"+counter,16384,0,Green);

Пример...

тикет в пределах работы эксперта или скрипта сохраняет последнее значение,

в нашем случае номер последнего "ордерсенда", вернее позы.


теперь далее, узнаём цену открытия и т-п этой позы:

double optp=OrderOpenPrice();
double lptp=OrderTakeProfit();
//
double pflo=(optp+lptp) / 2 ;

и собственно половинку цены меж ними...

Её то и вставляем в открытие лимитника:

ticket= OrderSend (Symbol(), OP_BUYLIMIT, Lot, pflo , 3, 0, 0, "_"+Symbol(), _MagicNumber, Lime);

А вообще, для расстановки по пипсам есть хорошая и штатная конструкция:

double bb=Ask+50*Point;

где вместо аска или бида подставляем свою расчитаную цену...

Например, открываем позу и выставляем отложенный вместе:

int skoka=50;
//
ticket= OrderSend (Symbol(), OP_BUY, Lot, Ask, 3, 0, 0, "_"+Symbol(), _MagicNumber, Lime);
//
ticket= OrderSend (Symbol(), OP_BUYLIMIT, Lot, Ask+skoka*Point, 3, 0, 0, "_"+Symbol(), _MagicNumber, Lime);

С направлением, спредами и пр. уже не сложно будет разрбраться.