Помогитеее)

 

Всем привет, пишу как бы виртуальный трейлинг, но возникла проблема.. Всё работает на покупку, а вот на продажу не хочет. Не пойму в чем дело((


//+-----------------------TrailingStop---------------------------------+
    for( int l = OrdersTotal()-1; l >=0 ; l-- ) //перебор всех открытых торговых позиций
    {
    if (OrderSelect(l, SELECT_BY_POS ) == true) 
    {if(OrderSymbol()==Symbol() && (MagicB!=0 && OrderMagicNumber()==MagicB) && OrderType()==0)
    {if(OrderType()==OP_BUY)
     TrallB =NormalizeDouble(OrderOpenPrice() - VSL*Point,Digits);
     if (TrallB<TrallBS) TrallB=TrallBS;        DrawHline("SLs Sell",TrallBS,clrBlue,1);
      if (Bid<=TrallBS) bool cls = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,clrRed);   
    if((Ask-Point*(TrailingStop+VSL) > TrallB))
       {double ordsl = NormalizeDouble(TrallB + (TrailingStep*Point),Digits);
       if (ordsl>TrallBS) TrallBS = ordsl;

    Print ("TrailingStop for BUY"," - ",OrderOpenPrice(),"-->" ,ordsl);}}}} 
//+-----------------------TrailingStop---------------------------------+
       for( int l = OrdersTotal()-1; l >=0 ; l-- ) //перебор всех открытых торговых позиций
    {   
    if (OrderSelect(l, SELECT_BY_POS ) == true) 
    {if(OrderSymbol()==Symbol() && (MagicS!=0 && OrderMagicNumber()==MagicS) && OrderType()==1)
     {if(OrderType()==OP_SELL)
     TrallS =NormalizeDouble(OrderOpenPrice() + VSL*Point,Digits);
        if (TrallS>TrallSS) TrallS=TrallSS;     DrawHline("SLs Sell",Trall,clrRed,1);
    if((Bid+Point*(TrailingStop+VSL) < TrallS))
    { double  ordsl = NormalizeDouble(TrallS - (TrailingStep*Point),Digits);
       if (ordsl!=Trall) Trall=ordsl;
         Print ("TrailingStop for SELL"," - ",OrderOpenPrice(),"-->" ,ordsl);}}}}

на покупку все работает, а вот на продажу значение Tralls при равно 0

 if (TrallS>TrallSS) TrallS=TrallSS;

Хотя тут TrallSS равно  цене к примеру 1.14555

Если (TrallS = 1.14600 > TrallSS = 1.14555) то TrallS = TrallSS значит TrallS уже равен 1.14555

Условия для покупки работает без проблем.. с продажей я где-то допустил ошибку) помогите исправить) Спасибо!!!

 
Aibek Mugiynov:

Всем привет, пишу как бы виртуальный трейлинг, но возникла проблема.. Всё работает на покупку, а вот на продажу не хочет. Не пойму в чем дело((


на покупку все работает, а вот на продажу значение Tralls при равно 0

Хотя тут TrallSS равно  цене к примеру 1.14555

Если (TrallS = 1.14600 > TrallSS = 1.14555) то TrallS = TrallSS значит TrallS уже равен 1.14555

Условия для покупки работает без проблем.. с продажей я где-то допустил ошибку) помогите исправить) Спасибо!!!

почему вы решили что не работает? потому что линия не там на графике стоит?

с уважением.

P.S.  если работает на бай, можно сделать очень просто.копируем то что работает, зеркалим(меняем все переменные на переменные для селл ордеров, меняем все проверки и условия на проверки соответствующие селл ордерам) код для селл ордеров, смотрим как работает.
 
Andrey Kisselyov:
почему вы решили что не работает? потому что линия не там на графике стоит?

с уважением.

P.S.  если работает на бай, можно сделать очень просто.копируем то что работает, зеркалим(меняем все переменные на переменные для селл ордеров, меняем все проверки и условия на проверки соответствующие селл ордерам) код для селл ордеров, смотрим как работает.

я поменял все переменные, зеркально, линия появляется на значении 0) хотя нужно на 1,14555

 
Aibek Mugiynov:

я поменял все переменные, зеркально, линия появляется на значении 0) хотя нужно на 1,14555

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

с уважением.

P.S. меня не интересует что вы делали раньше, так как у вас ошибка и вы ее скинули сюда.
 
Andrey Kisselyov:
сейчас поменяйте, и сделайте как я сказал, выложите код что у вас получился.

с уважением.

P.S. меня не интересует что вы делали раньше, так как у вас ошибка и вы ее скинули сюда.

//+-----------------------TrailingStop---------------------------------+
    for( int l = OrdersTotal()-1; l >=0 ; l-- ) //перебор всех открытых торговых позиций
    {
    if (OrderSelect(l, SELECT_BY_POS ) == true) 
    {if(OrderSymbol()==Symbol() && (MagicS!=0 && OrderMagicNumber()==MagicS) && OrderType()==1)
    {if(OrderType()==OP_SELL)
     TrallB =NormalizeDouble(OrderOpenPrice() + VSL*Point,Digits);
     if (TrallB>TrallBS) TrallB=TrallBS;        DrawHline("SLs Sell",TrallBS,clrBlue,1);
      if (Ask>=TrallBS) bool cls = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,clrRed);   
    if((Bid+Point*(TrailingStop+VSL) < TrallB))
       {double ordsl = NormalizeDouble(TrallB - (TrailingStep*Point),Digits);
       if (ordsl!=TrallBS) TrallBS = ordsl;

    Print ("TrailingStop for BUY"," - ",OrderOpenPrice(),"-->" ,ordsl);}}}} 
//+-----------------------TrailingStop---------------------------------+
       for( int l = OrdersTotal()-1; l >=0 ; l-- ) //перебор всех открытых торговых позиций
    {   
    if (OrderSelect(l, SELECT_BY_POS ) == true) 
    {if(OrderSymbol()==Symbol() && (MagicB!=0 && OrderMagicNumber()==MagicB) && OrderType()==0)
     {if(OrderType()==OP_BUY)
     TrallS =NormalizeDouble(OrderOpenPrice() - VSL*Point,Digits);
        if (TrallS<TrallSS) TrallS=TrallSS;     DrawHline("SLs Sell",TrallSS,clrRed,1);
    if((Ask-Point*(TrailingStop+VSL) > TrallS))
    { double  ordsl = NormalizeDouble(TrallS + (TrailingStep*Point),Digits);
       if (ordsl!=TrallSS) TrallSS=ordsl;
         Print ("TrailingStop for SELL"," - ",OrderOpenPrice(),"-->" ,ordsl);}}}}

Менял 1000 раз, что-то не то! Я когда убираю условие  if (TrallB>TrallBS) TrallB=TrallBS; линия появляеться.. но уже по цене 1,14600

 
Aibek Mugiynov:

Менял 1000 раз, что-то не то! Я когда убираю условие  if (TrallB>TrallBS) TrallB=TrallBS; линия появляеться.. но уже по цене 1,14600

проверьте этот код в работе.

с уважением.
 
Andrey Kisselyov:
проверьте этот код в работе.

с уважением.
Проверил, тут TrallSS =0 почему-то... Хотя в покупку TrallBS не равен 0, а цене заданной ordsl
 
Aibek Mugiynov:

...Не пойму в чем дело((


Не мудрено. Отформатируйте код, под for и под if пишите с фигурными скобками, даже если одна строка кода. Все вложенные if пишите с отступом. Тогlа будет и видно и думаться будет.

 
Aibek Mugiynov:
Проверил, тут TrallSS =0 почему-то... Хотя в покупку TrallBS не равен 0, а цене заданной ordsl
потому что изначально вы не задаете это значение в коде, для селл необходимо его задавать так как вы проверяете движение вниз а не вверх. для бай движение трала идет вверх и он считает стоп выше 0 потому и работает.

например внести такую строчку кода
TrallB =NormalizeDouble(OrderOpenPrice() + VSL*Point,Digits);
//вносим сюда
if (TrallBS==0)TrallBS=TrallB;
//-----------------
if (TrallB>TrallBS) TrallB=TrallBS;        DrawHline("SLs Sell",TrallBS,clrBlue,1);


с уважением.
 
Andrey Kisselyov:
потому что изначально вы не задаете это значение в коде, для селл необходимо его задавать так как вы проверяете движение вниз а не вверх. для бай движение трала идет вверх и он считает стоп выше 0 потому и работает.

например внести такую строчку кода


с уважением.

Спасибо БОЛЬШОЕ!!!

с Ув.Айбек

 
Aibek Mugiynov:

Спасибо БОЛЬШОЕ!!!

с Ув.Айбек

пожалуйста.

с уважением.