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

 
charony:

мне вас искренне жаль

взаимно )

ЗЫ: семь страниц трал мучать, это надо уметь )

 
да два раза отрезал, и все равно короткий
 

)))).

ЗЫ: в тестере не прогнать.

1. Ставим советник на график где открыты позы

2. Советник каждую позицию отмечает своей линией.

3. В Свойствах линии(строка "Описание") в пунктах задаем нужный трал для нужного ордера(имя линии не трогаем она равняется тикету ордера)

4. Наблюдаем как мучается Трал )))

5. Не спрашиваем как это впихнуть в невпихуемое.

Файлы:
 
//+-----------------------------trailingstop----------------------------------------------
for(int i=OrdersTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS)==true)
      {
         {
            int cmd=OrderType();
            if(cmd==OP_BUY)
            {
               if(ObjectFind(DoubleToStr(OrderTicket(),0))<0)
               {
                  ObjectCreateTrend(false,DoubleToStr(OrderTicket(),0),OBJ_HLINE,0,0,OrderOpenPrice(),0,0,Blue,0,0,"",0);
               }
               else
               {
                  if(ObjectDescription(DoubleToStr(OrderTicket(),0))!="30")//if(TrailingStop>0)  
                  {                 
                     if(Bid-OrderOpenPrice()>Point*StrToDouble(ObjectDescription(DoubleToStr(OrderTicket(),0))))
                     {
                        if(OrderStopLoss()<Bid-Point*StrToDouble(ObjectDescription(DoubleToStr(OrderTicket(),0))))
                        {
                           OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*StrToDouble(ObjectDescription(DoubleToStr(OrderTicket(),0))),OrderTakeProfit(),0,Green);
                        }
                     }
                  }
               }
            }
            if(cmd==OP_SELL)
            {
               if(ObjectFind(DoubleToStr(OrderTicket(),0))<0)
               {
                  ObjectCreateTrend(false,DoubleToStr(OrderTicket(),0),OBJ_HLINE,0,0,OrderOpenPrice(),0,0,Red,0,0,"",0);
               }
               else
               {
                  if(ObjectDescription(DoubleToStr(OrderTicket(),0))!="30")//TrailingStop>0)  
                  {                 
                     if((OrderOpenPrice()-Ask)>(Point*StrToDouble(ObjectDescription(DoubleToStr(OrderTicket(),0)))))
                     {
                        if((OrderStopLoss()>(Ask+Point*StrToDouble(ObjectDescription(DoubleToStr(OrderTicket(),0))))) || (OrderStopLoss()==0))
                        {
                           OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*StrToDouble(ObjectDescription(DoubleToStr(OrderTicket(),0))),OrderTakeProfit(),0,Red);
                        }
                     }
                  }
               }
            }
         }
      }
   }
   return(0);
  }
//+------------------------------------------------------------------+
void ObjectCreateTrend(bool RayLines,string iObjectName,int Type,int iWindow,int X1Time,double Y1Price,int X2Time,double Y2Price,color iColor,int Code,int sound,string coment,int angle)
{
        if (ObjectFind(iObjectName)<0) {
                ObjectCreate(iObjectName,Type,iWindow,0,0);
                ObjectSet(iObjectName,OBJPROP_COLOR,iColor);
         ObjectSet(iObjectName,OBJPROP_RAY,RayLines);
        }
        if (X1Time!=0)
           ObjectSet(iObjectName,OBJPROP_TIME1,X1Time);
        ObjectSet(iObjectName,OBJPROP_PRICE1,Y1Price);
        if (X2Time!=0)
           ObjectSet(iObjectName,OBJPROP_TIME2,X2Time);
        if (Y2Price!=0)
           ObjectSet(iObjectName,OBJPROP_PRICE2,Y2Price);
        if (Code!=0)
           ObjectSet(iObjectName,OBJPROP_ARROWCODE,Code);
        if (coment!="")
           ObjectSetText(iObjectName,coment,10,"Times New Roman",iColor);
        if (angle!=0)
           ObjectSet(iObjectName,OBJPROP_ANGLE,angle);
        //ObjectSet(iObjectName,OBJPROP_FIBOLEVELS,7);
        //ObjectSet(iObjectName,OBJPROP_FIRSTLEVEL+0,0);
        //ObjectSet(iObjectName,OBJPROP_FIRSTLEVEL+1,0.5);
        //ObjectSet(iObjectName,OBJPROP_FIRSTLEVEL+2,1);
}


 //-------------------------------------tral-------------------------------------------------
  
//+-----------------------------trailingstop end----------------------------------------------+
   
такое вставил
 


такое получил
 

х**ню вставил - х**ню получил, тогда уж при создании объекта делай описание "30", а не проверяй на наличие описания равному "30"

ЗЫ: мог бы спросить, как сделать так что бы описание объекта сразу равнялось "30".

 
if(ObjectDescription(DoubleToStr(OrderTicket(),0))!="30")/

вот по твоему замена "" на "30" к чему должна была привести?

ЗЫ: эта строка предотвращала запуск трала при пустом описании.

 
sanyooooook:

вот по твоему замена "" на "30" к чему должна была привести?

ЗЫ: эта строка предотвращала запуск трала при пустом описании.

Вот вам, удмуртам, точно неизвестна старая хохляцкая пословица - "Не тратьте куме сили..." :))
 
granit77:
Вот вам, удмуртам, точно неизвестна старая хохляцкая пословица - "Не тратьте куме сили..." :))
Впервые слышу, это наверно "как об стенку горох", или "как рыба об лед", или "дураков учить, что мертвых лечить" )
 
sanyooooook:

херню вставил - херню получил, тогда уж при создании объекта делай описание "30", а не проверяй на наличие описания равному "30"

ЗЫ: мог бы спросить, как сделать так что бы описание объекта сразу равнялось "30".


да чет страшно спрашивать, вы такой сердитый тип

В Свойствах линии(строка "Описание") в пунктах задаем нужный трал

ObjectDescription это свойства,сюда и вставил

куда нужно вставить? 30 пунктов трала