Сопровождение серий с помощью отложенных ордеров - страница 2

 
Konstantin Seredkin:

Проверил, все работает, только чуть на оборот

робот ставит отложку, ждет когда она сработает, после как сработает выше ставит еще отложку

Если же идет вниз цена, то не чего не происходит

 

 

Так у меня тоже получалось сделать...

Нужно же что бы вот выставилась отложка, цена прошла вниз на 200 пунктов, выше цены на 100 выставилась отложка, получается между отложниками с проходом вниз шаг 100 пунктов.

Далее если отложник срабатывает и становится рыночным ордером что бы от самого нижнего ордера, когда цена пошла вниз, снова начали ставятся отложники, прошли от самого нижнего ордера, пусть он рыночный или отложенный на 200 пунктов, выше на 100 поставили отложник... вот над таким алгоритмом весь мозг себе сломал... как бы если просто рыночными работать тут все просто, но мне не нужно что бы через каждые 100 пунктов открывались ордера, пусть ставяться отложники и если цена будет корректироваться чуть вверх что то сработает, но уже в этом виде серия усреднения будет намного меньше.

G Попробуйте этот вариант
//+------------------------------------------------------------------+
//|                                                       помощь.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input int Magic=12345;
input double Lot=0.1;
input int   Distance1=200;
input int   Distance2=100;

int tiket=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(Total_orders(_Symbol,OP_BUYSTOP)==0)
     {
      tiket=OrderSend(_Symbol,OP_BUYSTOP,Lot,Ask+Distance2*_Point,3,0,0,NULL,Magic);
      if(tiket<0)Print("Ошибка OrderSend № - ",GetLastError());
     }

   event(tiket);

  }
//+------------------------------------------------------------------+
int Total_orders(string symbol,int type)
  {
   int n=0;
   int total=OrdersTotal();

   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         if(OrderType()!=type)continue;
         if(OrderMagicNumber()!=Magic)continue;
         if(OrderSymbol()!=symbol)continue;
         n++;
        }
     }
   return(n);
  }
//+------------------------------------------------------------------+
void event(int ticket)
  {
   if(OrderSelect(ticket,SELECT_BY_TICKET))
     {
      //if(OrderType()==OP_BUY)
      //  {
      //   tiket=OrderSend(_Symbol,OP_BUYSTOP,Lot,OrderOpenPrice()+Distance*_Point,3,0,0,NULL,Magic);
      //   if(tiket<0)Print("Ошибка OrderSend № - ",GetLastError());
      //  }
      if(Ask<=OrderOpenPrice()-Distance1*_Point)
        {
         tiket=OrderSend(_Symbol,OP_BUYSTOP,Lot,OrderOpenPrice()+Distance2*_Point,3,0,0,NULL,Magic);
         if(tiket<0)Print("Ошибка OrderSend № - ",GetLastError());
        }
     }
  }
//+------------------------------------------------------------------+
 

Тут получается мы выставили отложник, отошли вниз от него на дельта1 + дельта2 пунктов и выше отложника выставляется сетка

 

 

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

Идем вниз, а сверху через данные отступы у нас сеточка формируется

 

 Ну замените последний на нижний/верхний, проявите хоть чуточку фантази


void Terminal2()
{
double oldupprice = 0;

double Upprice = 0;          

double olddwprice = 0;
double DWprice = 999999;


int KoL=OrdersHistoryTotal();
   
ArrayInitialize(Mas_KOL,0);
   for(
int i=Kol-1>= 0i--)
     {
      if(
OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
     {    
      if (
OrderSymbol()== Symbol()&& OrderMagicNumber() == Magik)

     {




              
oldupprice = OrderOpenPrice();
                 if (
oldupprice > Upprice)
                   {

                  
Upprice = oldupprice;
                   }
       

               olddwprice = OrderOpenPrice();
                 if (
olddwprice < Dwprice)
                   {

                  
Dwprice = olddwprice;

                   }      



      Mas_KOL[0]++;     //количество ордеров
      
}
      }
      }
      
Mas_KOL[1]=
Upprice;//цена самого верхнего ордеров неважнокакого типа
      
Mas_KOL[2]=
Dwprice;//цена самого нижненего ордеров неважнокакого типа 


массив на три элемента в объявить в начальных переменных double Mas_KOL[3];
Причина обращения: