0
Хорошо
Входим в рынок по индикатору стохастик
Если Сигнал выше Buy, иначе — Sell (Ордер — А)
лот 0.1 стоп лосс 90 п. ТейкПрофит 5п.
С ордером А выставляем (ордер В) buystop или sellstop в противоположную сторону через 70п. (ТП — 27 п., стоп лосс 90п. лот 0.5.
при срабатывании ордера В выставляется ордер С с лотом 1.5 buystop или sellstop в противоположную сторону через 50п. ТП — 22 п.
при срабатывании ордера С выставляется ордер D с лотом 1.5 buystop или sellstop в противоположную сторону через 60п. ТП — 60 п.

ТЗ: Написать код, чтобы больше не открывалось ордеров. Когда закрывается один из ABCD — ордеров.
Алгоритм открытия ордеров уже есть. Только этой детали не хватает.
avatar

LeonidPetr

  • 7 октября 2022, 00:14
0
Большое спасибо… все работает правильно.
*uptrend* 
avatar

LeonidPetr

  • 1 июля 2021, 23:26
0
Спасибо, Андрей!!!
Попробую привязать к своим расчетам.
Остался вопрос.
Какой код нужен, чтобы не открывалась куча ордеров после выставления отложенного ордера (например BUYSTOP) в момент срабатывания ранее выставленного отложенного (SELLSTOP)?
Сценарий:
1. Открытие рыночного Buy (к примеру)
2. Одновременно выставляется SELLSTOP (в разворот)
3. Срабатывает SELLSTOP и сразу выставляется BUYSTOP (в разворот)

Этот сценарий одинаков для всех пар. На тестере каждой пары все работает.
Запускаю на всех парах, до 3-го пункта сценария все Ок, как только доходит до 3-го пункта, начинаются выставляться отложенные на каждом тике.
Я попробую в твоей версии добавить, но, если есть готовое решение, а я полагаю, что это должно быть простое условие, то это сильно поможет мне закончить.
Заранее спасибо
avatar

LeonidPetr

  • 30 июня 2021, 00:34
0
благодарю, я уже пробовал… ничего не меняется
это условие — &&OrderMagicNumber(), или &&OrderMagicNumber()==Mn вообще не играет роли… надо убрать его вообще
avatar

LeonidPetr

  • 27 июня 2021, 23:52
0
Благодарю
avatar

LeonidPetr

  • 27 июня 2021, 09:11
0
1. if(Signal>Main&&Signal<70) — это условия открытия рыночного ордера
2. «Объем Lot2 понятен только автору. «Lot2=Lot1+3» — плюс 3 чего?» — Lot1=0.1*6...Lot2=0.6+0.1*3=0.9
3. Если уйдут все в стоп, тогда убыток будет зафиксирован в пределах 10%-15% от депозита. Это убыток, который в этом случае пока приходится принять.
avatar

LeonidPetr

  • 26 июня 2021, 11:25
0
А как у вас ищут поручителей?
Мне нужно что-то сделать, чтобы найти его?

Стратегия очень простая.
Через каждые полчаса открывается рыночный ордер (например BUY) lot=0.1 с ТП 5 пунктов и стопом 100 пунктов по значениям из стохастика, через 80 пунктов от цены открытия рыночного — отложенный ордер (SELLSTOP) Lot1=lot*6 в сторону StopLoss рыночного (алгоритм расчета есть) со стопом 70 пунктов и ТП равным 25 пунктов. В случае открытия отложенного (SELLSTOP) ордера выставляется отложенный(BUYSTOP) на 50пунков от цены открытия (SELLSTOP) с объемом Lot2=Lot1+3 в сторону StopLoss SELLSTOP.
При выполнения тэйк-профита — закрытие всех отложенных.
Стратегия простая, но я только на тестере любой пары добился решения. При совместной работе с другими парами возникает хаос.
avatar

LeonidPetr

  • 25 июня 2021, 23:55
0
extern int StochK=200;                  
extern int StochD=12;                   
extern int StochSlowing=1;            
extern int UpperThreshold=80;         
extern int LowerThreShold=20;
extern int Mn=140;      //Magic
extern int mn;
extern int X=1;
extern int TimFr1=48, TimFr2=24,TimFr3=4;
extern int n=6;
extern double Lot1;
extern double lots;
extern double Lot;

int Ontime()
  {
   int time=0;
   if((Hour()==2&&Minute()<=1)||(Hour()==2&&Minute()==30)||(Hour()==3&&Minute()<=1))

      time=1;

   return(time);
  }


void PutOrderStop(int order_type,double price,double SL,double TP,int Magic)
  {
   int sellstop=0;

   sellstop=OrderSend(Symbol(),order_type,Lot,price,0,SL,TP,"My order#",Mn,0,Red);
   return;
  }


int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Mn)
           {
            if(OrderType()<4)
               count++;
           }
        }
     }
   return(count);
  }
//=========================================================
int BuyTicket;
int SellTicket;


int start()
  {
   double S=AccountMargin() +  AccountFreeMargin();

   int OPB1,OPS1,ss;

   int T=7*X;
   double AA = iClose(NULL,PERIOD_H1,TimFr1),BB = iClose(NULL,PERIOD_H1,TimFr2),
          CC=iClose(NULL,PERIOD_H1,1),AK = iOpen(NULL,PERIOD_H1,4);

   if(S<10000000)
      lots= S*0.0002;

   double AC=(CC-AA)/Point,AKC=(CC-AK)/Point,BC=(CC-BB)/Point;
   double TR = AC;
  double Signal=iStochastic(Symbol(),0,StochK,StochD,StochSlowing,MODE_SMA,STO_LOWHIGH,MODE_SIGNAL,1);
   double Main=iStochastic(Symbol(),0,StochK,StochD,StochSlowing,MODE_SMA,STO_LOWHIGH,MODE_MAIN,1);
   double Last=iStochastic(Symbol(),0,StochK,StochD,StochSlowing,MODE_SMA,STO_LOWHIGH,MODE_BASE,2);
  int s,SS;
   if(Signal>Main)
     {
      double m=Signal/(Main+0.0001);
     }
   else
      if(Signal<Main)
         m=Main/(Signal+0.0001);
   double ma=m*100;
   int DSM=Signal-Main;
   int DMS=Main-Signal;

  
      if(Signal>Main&&Signal<70)
        {
         if((DSM>10&&DSM<30)&&((ma>100&&ma<115)||(ma>120&&ma<700)))
           {OPB1=1; ss=m*Signal; if(ss<90)ss=m*70;if(ss>100)ss=100; SS=ss;}
            else
               if(((ma>105&&ma<105)||(ma>125&&ma<140)||(ma>145&&ma<700)))
                 {OPS1=1; ss=m*Main; if(ss<90)ss=m*90;if(ss>120)ss=110; SS=150;} 
        }

      

   
  s=ss/(n-1);//отработка
   s=s*X;
   ss=ss*X;
   SS=SS*X;

  double Bstoploss,Sstoploss;
   Bstoploss=Bid-ss*Point;
   Sstoploss=Ask+ss*Point;
   int PriceBuy=ss-s-10;
   int PriceSell=ss-s-10;
   double BstopOpen =Ask+ PriceBuy*Point;
   double SstopOpen =Bid- PriceSell*Point;
   double BuyStopLoss=Bid-ss*Point,SellStopLoss=Ask+ss*Point;
   double BstopOpenLoss = BstopOpen-SS*Point;
   double SstopOpenLoss = SstopOpen+SS*Point;
   double BstopClose = BstopOpen+s*Point;
   double SstopClose = SstopOpen-s*Point;
   Lot=lots*n;
   Lot1=lots*(n+n/2);
double OPBSS=OrderOpenPrice()-30*X*Point;  double OPSSS=OrderOpenPrice()+30*X*Point;

   bool operation=0;
     for(int pos=0;pos<OrdersTotal();pos++)
     {if ( OrderSelect (pos, SELECT_BY_POS) == false )  continue;
      if ( OrderSymbol()==Symbol()) break;}

if(Ontime()==1){
    if(OPB1==1)
        {operation=1;if(operation==1 && (OrderSymbol()!=Symbol()||OrdersTotal()==0))
                int OP=OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-ss*Point,Ask+T*Point,"My order#",mn,0,Green);
          }
  if( OP>0 )
         {if((OrderSymbol()!=Symbol()||OrdersTotal()==1))
         PutOrderStop(5,SstopOpen,SstopOpenLoss,SstopClose,Mn);}
    
    if(OPS1==1)      
        {operation=1;if(operation==1 &&(OrderSymbol()!=Symbol()||OrdersTotal()==0))
        int OPSs=OrderSend(Symbol(),OP_SELL,lots,Bid,0,Ask+ss*Point,Bid-T*Point,"My order#",mn,0,Red);
        }
     if( OPSs>0 )
         {if((OrderSymbol()!=Symbol()||OrdersTotal()==1))
         PutOrderStop(4,BstopOpen,BstopOpenLoss,BstopClose,Mn);
          }    
        }
     

      

 if(CountTrades()==1){  
 if((OrderSymbol()!=Symbol()||OrdersTotal()==2))
 {  
  BuyTicket = OrderSend(Symbol(),OP_BUYSTOP,Lot1,OPBSS,0,OPBSS-70*X*Point,OPBSS+45*X*Point,"My order#",Mn,0,Blue);}
return(0);
 }

if(CountTrades()==1){ 
if((OrderSymbol()!=Symbol()||OrdersTotal()==2)){
SellTicket=OrderSend(Symbol(),OP_SELLSTOP,Lot1,OPSSS,0,OPSSS+70*X*Point,OPSSS-30*X*Point,"My order#",Mn,0,Red);}
return(0);
}     
   
  if(OrderMagicNumber()==Mn)
     {
      for(int j=OrdersTotal()-1; j>=0; j--)
         if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol()&&OrderMagicNumber())
               int del=OrderDelete(OrderTicket());

            if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol()&&OrderMagicNumber())
               del=OrderDelete(OrderTicket());
           }
      return(0);
     }

   Comment("\n |  SIMsim ", "  Валюта   ",Symbol(),
           "\n |      Значения TR          ",TR,
           "\n |      Значения OrdersTotal()         ",OrdersTotal(),
           "\n |      Значения OPr        ",0,
           "\n |      Значения ma === ",ma,"           Значения total_orders         ",TotalOpenOrders(),
           "\n |      Значения OPB1       ",OPB1,"     Значения OPS1      ",OPS1,
           "\n |      Значения Main       ",Main,"     Значения DSM       ",DSM,"     Значения DMS       ",DMS,
           "\n |      Значения Signal     ",Signal,"     Значения OPBSS      ",OPBSS,"     Значения OPBSS      ",OPSSS,
           "\n |      Значения lots       ",lots,"     Значения OrderOpenPrice()         ",OrderOpenPrice(),
           "\n |      Значения ss         ",ss,"     Значения count      ",CountTrades(),
           "\n |      Mn              ",Mn
          );



   return(0);

  }
avatar

LeonidPetr

  • 25 июня 2021, 19:00
0
мы все из дилетантов пришли… и у всех были вопросы.
Прежде чем задать тут вопрос, поверьте, я немало перекопал советников и вариантов… но, что-то, видимо еще недопонимаю…
avatar

LeonidPetr

  • 25 июня 2021, 18:45
0
на каждую пару свой магик номер
avatar

LeonidPetr

  • 25 июня 2021, 18:42
0
спасибо большое… буду пробовать… позже отвечу о результатах
avatar

LeonidPetr

  • 30 декабря 2020, 21:53
0


<code>
  (На рис. это 1)       if(OPB1==1)
                    {
                     operation=1;if(operation==1 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)
                      OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-ss*Point,Ask+T*Point,"My order#",mn,sl,Green);
        
  (На рис. это 2)   if(operation==1 &&OrderSymbol()!=Symbol()||OrdersTotal()==1)
        OrderSend(Symbol(),OP_SELLSTOP,Lot,SstopOpen,0,SstopOpenLoss,SstopClose,"My order#",Mn,sl,Red);}
        
        int count=0;
   for(int ii=OrdersTotal()-1; ii>=0; ii--)
     {
      if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Mn)
           {
            if(OrderType()<5)count++;OrderTicket();
           }
         }
      }
 
      
       double OPSS=OrderOpenPrice();
           
  (На рис. это 4) if(count==1)
                              {
                               if(operation==1 &&OrderSymbol()!=Symbol()||OrdersTotal()==2)      
                  OrderSend(Symbol(),OP_BUYSTOP,Lot,Ask+20*X*Point,0,Bid-30*X*Point,Ask+30*X*Point,"My order#",Mn,0,Green);
                               }</code>

5 и 6 -> соответственно STOP LOSS по OP_BUY и TAKE PROFIT по OP_SELLSTOP

Мне хотелось бы, чтобы ордер #4 выставлялся по цене отложенного ордера #2, а не по Ask
Как сделать, чтобы советник видел цену этого ордера и выставлял ордера по этой цене, даже после закрытия по профиту #4
avatar

LeonidPetr

  • 27 декабря 2020, 21:27
0
спасибо))
avatar

LeonidPetr

  • 26 декабря 2020, 02:10
0
как говнюк говнюку отвечу тебе… я сюда не за халявным кодом пришел, как ты выразился… я задал вопрос в другой плоскости… удачи тебе… она тебе очень нужна, ибо, как я понимаю, тебя жизнь жестоко обделила
avatar

LeonidPetr

  • 26 декабря 2020, 00:12
0
спасибо
У вас ручное выставление, я вижу.
Мне собственно, идея нужна… или логическая мысль.
Я через магический номер пытаюсь, но запутался и зашел в тупик…
Поэтому и обратился сюда.
Сам советник я написал, и он отлично работает на полном автомате на любой паре.
Но я хочу, уменьшить потери на стоп-лосе.
Надо воткнуть локирующий ордер после срабатывания отложенного.
avatar

LeonidPetr

  • 26 декабря 2020, 00:02
0
в смысле?
avatar

LeonidPetr

  • 25 декабря 2020, 21:53
Начать торговлю с Альпари