Скачать MetaTrader 5

Два отложенных ордера - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
locol91
270
locol91  
XmaksasX:

т.е. выставить у меня их получается ну не два их выставляется гораздо больше(((

Открытие отложки надо привязать к чему либо. Например по времени (зависимость от часа суток, от минуты часа или еще каканидь штука). Или к факту пробоя фрактала. Или по индикаторам. Или хотя бы к количеству выставленных ордеров. У вас идет постоянная обработка инфы и ПОСТОЯННОЕ выставление ордеров. Максимум ордеров вы прописали в условиях. Вроде это-

extern int Ords = 100;

А как осуществляеться контроль количества отложенных ордеров на данный момент времени (или по заданной цене)  и контроль общей суммы выставленных в рынке отложенных ордеров? И как осуществляеться контроль количества открытых позиций? Есть на форуме ветка с полезными функциями (автор -  КИМ 4 и прочие спецы). Воспользуйтесь. Или поподробнее разберите эти условия

 if ( buystop < 1 && buys < Ords) 
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
 if ( Total.b < 2) 
,,,,,,,,,,,,,,,,,,,,,,
TarasBY
1740
TarasBY  
XmaksasX:

Да нет Вы не поняли мне надо было выставить сразу две отложки в разном месте с разным ТР вот как сделал

Попробуйте так:

extern int    Ords = 100;        // баев и сэллов (считаем отдельно) разрешаем по стока штук иметь
extern int    TP = 60;           // тейк ордеров
extern int    Cena = 10;         // расстояние от цены
extern double Lots = 0.1;        // лот
extern double PROSADKA = 0.5;    // когда эквити равно или менее вот такой части от баланса
int           mag, M;
double        buy_OPEN, sell_OPEN;
string        gs_CommentSecond = "Second";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
//----
   
//----
    return (0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//----
   
//----
    return (0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
    int lia_MyOrders[6], Total = 0;
//----
    ArrayInitialize (lia_MyOrders, 0);
    for (int i = OrdersTotal() - 1; i >= 0; i--) //проверка ордеров
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderMagicNumber() != mag) continue;
        if (OrderSymbol() != Symbol()) continue;
        Total++;
        lia_MyOrders[OrderType()]++;
        //---- Учёт 2-го BUYSTOPa
        //if (OrderType() == OP_BUYSTOP) if (StringFind (OrderComment(), gs_CommentSecond) >= 0)
    }                         
    //---- Если просадки до фига - запрет на выставление новых отложек   
    if (AccountEquity() / AccountBalance() < PROSADKA) return (0);
    if (M == iTime (Symbol(), 1, 0)) return (0);
    //---- Выставление отложек
    if (lia_MyOrders[OP_BUYSTOP] + lia_MyOrders[OP_BUY] < Ords)
    {
        if (lia_MyOrders[OP_BUYSTOP] < 1)
        {
            buy_OPEN = NormalizeDouble (Ask + Cena * Point, Digits);
            OrderSend (Symbol(), OP_BUYSTOP, Lots, buy_OPEN, 3, 0, buy_OPEN + TP * Point, NULL, mag, 0, Blue);
            lia_MyOrders[OP_BUYSTOP]++;
        }
        if (lia_MyOrders[OP_BUYSTOP] < 2)
        {
            buy_OPEN = NormalizeDouble (Ask + (Cena * 2) * Point, Digits);
            OrderSend (Symbol(), OP_BUYSTOP, Lots, buy_OPEN, 3, 0, buy_OPEN + TP * Point, gs_CommentSecond, mag, 0, RoyalBlue);
        }
        M = iTime (Symbol(), 1, 0);
    }   
//----
    return (0);
}
//+------------------------------------------------------------------+
Макс
137
Макс  
вставил код скомпилил что то вообще ни чего не открывает
Макс
137
Макс  
  if (AccountEquity() / AccountBalance() >= PROSADKA) return (0);
    if (M == iTime (Symbol(), 1, 0)) return (0);

поменял на это теперь все ок

int LET = 0;
  if (AccountEquity()/AccountBalance() < PROSADKA)
  LET = 1;  // если просадки до фига - запрет на выставление новых отложек   
   
  // выставление отложек :
  if(LET == 0 && TimeCurrent() && M != iTime(Symbol(),1,0)) // раз в минуту
    
Макс
137
Макс  
и вроде открывает все хорошо не больше двух спасибо вам большое
TarasBY
1740
TarasBY  
XmaksasX:
вставил код скомпилил что то вообще ни чего не открывает

Да, немножечко перемудрил - исправил. Это трендовый подход, на сколько я понимаю. А тренд бывает не тольк в BUY, а соответственно в код нужно добавить возможность изменения направления торговли:

#define STOP  4
extern int    Magic         = 2013;   // OrderMagicNumber()
extern int    Open_Period   = 1;      // В начале бара этого периода открываются отложенники
extern int    Ords          = 100;    // баев и сэллов (считаем отдельно) разрешаем по стока штук иметь
extern int    TP            = 60;     // тейк ордеров
extern int    OpenOrderOnly = -1;   // Задание направления открытия ордеров: 0-BUY; 1-SELL; -1-BUY+SELL
extern int    Cena          = 10;     // расстояние от цены
extern double Lots          = 0.1;    // лот
extern double PROSADKA      = 0.5;    // когда эквити равно или менее вот такой части от баланса
datetime      gdt_NewBar;
string        gs_CommentSecond = "Second";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
//----
   
//----
    return (0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//----
   
//----
    return (0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
    int lia_MyOrders[6];
//----
    ArrayInitialize (lia_MyOrders, 0);
    for (int i = OrdersTotal() - 1; i >= 0; i--) //проверка ордеров
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderMagicNumber() != Magic) continue;
        if (OrderSymbol() != Symbol()) continue;
        lia_MyOrders[OrderType()]++;
        //---- Учёт 2-го BUYSTOPa
        //if (OrderType() == OP_BUYSTOP) if (StringFind (OrderComment(), gs_CommentSecond) >= 0)
    }                         
    //---- Если просадки до фига - запрет на выставление новых отложек   
    if (AccountEquity() / AccountBalance() < PROSADKA) return (0);
    datetime ldt_BeginBar = iTime (Symbol(), Open_Period, 0);
    if (gdt_NewBar == ldt_BeginBar) return (0);
    int    li_cmd = 1, li_Type;
    double ld_Price = Ask, ld_OpenPrice;
    color  lca_Colors[] = {Blue,Red};
    //---- Выставление отложек
    for (int li_OP = 0; li_OP < 2; li_OP++)
    {
        //---- Организуем направленность открытия ордеров
        if (OpenOrderOnly != -1) if (li_OP != OpenOrderOnly) continue;
        if (li_OP == 1) {li_cmd = -1; ld_Price = Bid;}
        li_Type = li_OP + STOP;
        if (lia_MyOrders[li_Type] + lia_MyOrders[li_OP] < Ords)
        {
            if (lia_MyOrders[li_Type] < 1)
            {
                ld_OpenPrice = NormalizeDouble (ld_Price + li_cmd * Cena * Point, Digits);
                OrderSend (Symbol(), li_Type, Lots, ld_OpenPrice, 3, 0, ld_OpenPrice + li_cmd * TP * Point, NULL, Magic, 0, lca_Colors[li_OP]);
                lia_MyOrders[li_Type]++;
            }
            if (lia_MyOrders[li_Type] < 2)
            {
                ld_OpenPrice = NormalizeDouble (ld_Price + (li_cmd * Cena * 2) * Point, Digits);
                OrderSend (Symbol(), li_Type, Lots, ld_OpenPrice, 3, 0, ld_OpenPrice + li_cmd * TP * Point, gs_CommentSecond, Magic, 0, lca_Colors[li_OP]);
            }
        }
    }   
    gdt_NewBar = ldt_BeginBar;
//----
    return (0);
}
//+------------------------------------------------------------------+
Макс
137
Макс  

не хочет открывать комментирую вот эту строку

if (li_OP != -1) if (li_OP != OpenOrderOnly) continue;

и открывает 4 ордера два на бай два на селл

Макс
137
Макс  

сделал вот так

#property copyright ""
#property link  ""
extern int Ords = 100;          // баев и сэллов (считаем отдельно) разрешаем по стока штук иметь
extern int TP = 60;           // тейк ордеров
extern int Cena = 20;         // расстояние от цены
extern int PROF = 40;         // тралить стоп начнем с профита во стока пипсов
extern double Lots = 0.1;     // лот
extern double PROSADKA = 0.5; // когда эквити равно или менее вот такой части от баланса

int mag=2222, T, M, magic=1111;

double buy_OPEN, sell_OPEN;
double Equti;
bool b=false;
bool s=false;

int start()
  {
  
 
//Alert(Equti);

 int buy = 0,sell = 0;
 int buystop = 0,sellstop = 0;
 int buys = 0, sells = 0;
 int Total = 0, Total.b =0, Total.s =0;
  for(int i = 0; i < OrdersTotal(); i ++) //проверка ордеров
    {
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
     Total ++;
     
     if(OrderType() == OP_BUYSTOP)
     buystop  = OrderTicket();
     
     if(OrderType() == OP_BUYSTOP && OrderMagicNumber() == magic)
     Total.b = OrderTicket();
       
     if(OrderType() == OP_BUYSTOP || OrderType() == OP_BUY)   
     buys ++;
  
    }
 
 int LET = 0;
  if (AccountEquity()/AccountBalance() < PROSADKA)
  LET = 1;  // если просадки до фига - запрет на выставление новых отложек   
   
  // выставление отложек :
  if(LET == 0 && TimeCurrent() && M != iTime(Symbol(),1,0)) // раз в минуту
   {  
    
    if ( buystop < 1 && buys < Ords) 
     {
      buy_OPEN = NormalizeDouble(Ask+Cena*Point,Digits);
      buystop = OrderSend(Symbol(),OP_BUYSTOP,Lots,buy_OPEN,3,0,buy_OPEN+TP*Point,NULL,mag,0,Blue);
      }
      
   
    if ( Total.b < 1 && buys < Ords) 
     {
      buy_OPEN = NormalizeDouble(Ask+(Cena*2)*Point,Digits);
      Total.b = OrderSend(Symbol(),OP_BUYSTOP,Lots,buy_OPEN,3,0,buy_OPEN+TP*Point,NULL,magic,0,Blue);
     }    
         
   
      M = iTime(Symbol(),1,0);
  }   

    
   return(0);
  }


тоже самое сделаю и для ордеров типа селл скажите на сколько это правильно или наоборот не правильно???

TarasBY
1740
TarasBY  
XmaksasX:

не хочет открывать комментирую вот эту строку

и открывает 4 ордера два на бай два на селл

В этой строчке была опечатка (исправил):

if (OpenOrderOnly != -1) if (li_OP != OpenOrderOnly) continue;
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий