Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2160

 
Maxim Kuznetsov #:

смотря что вы разумеете под risk%, - стоит добавлять AccountMargin() к Free; просто обратите внимание, а то возможны сюрпризы

Большое спасибо за замечание

 
законопослушный гражданин #:

да вроде во многих советниках так сделано. а в чем риск?

Я бы ставил по одной лимитке, а при срабатывании добавлял новую.
 
Tretyakov Rostyslav #:
Я бы ставил по одной лимитке, а при срабатывании добавлял новую.

хмм... а это неплохая идея! типа как "виртуальная сетка"?

 
законопослушный гражданин #:

хмм... а это неплохая идея! типа как "виртуальная сетка"?

Так мне кажется проще, проверил - лимитка есть - ждем...проверил- лимитки не - ставим новую

и тралить нужно только одну лимитку

 
законопослушный гражданин #:

хмм... а это неплохая идея! типа как "виртуальная сетка"?

Tretyakov Rostyslav #:

Так мне кажется проще, проверил - лимитка есть - ждем...проверил- лимитки не - ставим новую

и тралить нужно только одну лимитку

И меньше обращений к торговому серверу будет, не любят они частые обращения.

 

и еще вопрос.

бай лимитки открываются по цене Ask, соответственно модифицировать ордер тоже нужно используя цену Ask?

я спрашиваю, т.к. нашел на кодбазе советник и там так:

if(OrderType()==OP_BUYLIMIT)
                 {
                  blimit++;

                  if(SL>0 && TP>0 && Bid-OrderOpenPrice()>step && (Bid-step)-OrderOpenPrice()>step_interval && OrderOpenPrice()!=NormalizeDouble(Bid-step,Digits))
                    {bool mod=OrderModify(OrderTicket(),NormalizeDouble(Bid-step,Digits),NormalizeDouble(Bid-step-sl,Digits),NormalizeDouble(Bid-step+tp,Digits),0,0);if(!mod) Print("Error modification block 11=",GetLastError());}
                  if(SL>0 && TP==0 && Bid-OrderOpenPrice()>step && (Bid-step)-OrderOpenPrice()>step_interval && OrderOpenPrice()!=NormalizeDouble(Bid-step,Digits))
                    {bool mod=OrderModify(OrderTicket(),NormalizeDouble(Bid-step,Digits),NormalizeDouble(Bid-step-sl,Digits),0,0,0);if(!mod) Print("Error modification block 12=",GetLastError());}
                  if(SL==0 && TP>0 && Bid-OrderOpenPrice()>step && (Bid-step)-OrderOpenPrice()>step_interval && OrderOpenPrice()!=NormalizeDouble(Bid-step,Digits))
                    {bool mod=OrderModify(OrderTicket(),NormalizeDouble(Bid-step,Digits),0,NormalizeDouble(Bid-step+tp,Digits),0,0);if(!mod) Print("Error modification block 13=",GetLastError());}
                  if(SL==0 && TP==0 && Bid-OrderOpenPrice()>step && (Bid-step)-OrderOpenPrice()>step_interval && OrderOpenPrice()!=NormalizeDouble(Bid-step,Digits))
                    {bool mod=OrderModify(OrderTicket(),NormalizeDouble(Bid-step,Digits),0,0,0,0);if(!mod) Print("Error modification=",GetLastError());}

я из этого советника делал свой, и тогда не придал этому значения.

Так как правильно делается?
 

 
Tretyakov Rostyslav #:

Так мне кажется проще, проверил - лимитка есть - ждем...проверил- лимитки не - ставим новую

и тралить нужно только одну лимитку

согласен. спасибо.

 
datetime time2 = Time[0];
double price2 = 0;
string BPtext3;
color clr2 = 0;
if (BULine(0) > 0)
{
clr2 = clrOrangeRed;
BPtext3 = "q";
price2 = BULine(0);
}
if (BULine(1) > 0)
{
clr2 = clrLime;
BPtext3 = "q";
price2 = BULine(1);
}
ObjectCreate("label_object14", OBJ_TEXT, 0, 0, 0);
ObjectSet("label_object14",OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER); // ANCHOR_RIGHT_UPPER, ANCHOR_UPPER
ObjectSet("label_object14", OBJPROP_TIME1 ,time2); //Бар стрелки
ObjectSet("label_object14", OBJPROP_PRICE1 ,price2); //Цена стрелки
ObjectSetText("label_object14",StringConcatenate(B Ptext3), 10, "Wingdings 3", clr2); 

В данном коде выводится стрелка на горизонтальной линии с определенной ценой.
ObjectSet("label_object14", OBJPROP_PRICE1 ,price2); //Цена стрелки - это служит координатами Y для стрелки.
ObjectSet("label_object14", OBJPROP_TIME1 ,time2); //Бар стрелки - это координаты X - стрелка выводится на текущем баре.
Подскажите, пожалуйста, что нужно изменить в вышеприведенном коде, чтобы стрелка выводилась не на текущем баре, а всегда максимально справа на графике?
(см. скрин)


 
FEEX #:

В данном коде выводится стрелка на горизонтальной линии с определенной ценой.
ObjectSet("label_object14", OBJPROP_PRICE1 ,price2); //Цена стрелки - это служит координатами Y для стрелки.
ObjectSet("label_object14", OBJPROP_TIME1 ,time2); //Бар стрелки - это координаты X - стрелка выводится на текущем баре.
Подскажите, пожалуйста, что нужно изменить в вышеприведенном коде, чтобы стрелка выводилась не на текущем баре, а всегда максимально справа на графике?
(см. скрин)


Чтобы сделать как Вы хотите, надо добавлять процедуру перевода координаты во время

Проще добавить отступ от текущего бара

ObjectSet("label_object14", OBJPROP_TIME1 ,time2+(bars*_Period*60)); //Бар стрелки

bars - количество баров для отступа

 
законопослушный гражданин #:

и еще вопрос.

бай лимитки открываются по цене Ask, соответственно модифицировать ордер тоже нужно используя цену Ask?

я спрашиваю, т.к. нашел на кодбазе советник и там так:

я из этого советника делал свой, и тогда не придал этому значения.

Так как правильно делается?
 

Выставлять бай лимитки все равно по какой цене Bid или Ask лишь бы вписаться в стоплевел, а вот тралить надо по Ask