Помогите разобраться с проблемой закрытия ордеров (ордера не закрываются). - страница 2

 
Alexey Viktorov:
Алексей, это МТ4?
В любом случае - заявку в СД писать нужно.
И ещё - покажи что на демо-счёте при таком запросе. А то даёшь утвердиться в ошибочных мыслеизъявлениях топикстартеру.
 
Artyom Trishkin:
Алексей, это МТ4?
В любом случае - заявку в СД писать нужно.
И ещё - покажи что на демо-счёте при таком запросе. А то даёшь утвердиться в ошибочных мыслеизъявлениях топикстартеру.

Ну, извини Артём. Я без злого умысла. А ты-то тут при каких делах??? Это косяки тестера и ты знать о всех косяках не должен. А вот кому были адресованы твои сообщения на реальном счёте нарвётся на проблему и флаг ему в руки... Пусть потом опять пишет вопросы.

 
Alexey Viktorov:

Ну, извини Артём. Я без злого умысла. А ты-то тут при каких делах??? Это косяки тестера и ты знать о всех косяках не должен. А вот кому были адресованы твои сообщения на реальном счёте нарвётся на проблему и флаг ему в руки... Пусть потом опять пишет вопросы.

Да ладно - мне не жалко и не важно кто там чего подумает. А вот советник тестовый свой скинь мне (или прямо сюда прицепи) - я напишу в СД и его приложу - просто самому сейчас нет совсем времени писать что-то для тестов - гора дел неотложных. Ну или сам заявку в СД напиши - такие косяки исправлять нужно, мне кажется даже уже в замороженной для развития платформе.

 
Artyom Trishkin:

Спасибо за "молодого человека" - классный комплимент. Хоть их мужчинам и не требуется. Разве плохо в 48 выглядеть на 30 - 35 ?

И знаете, всё же прислушайтесь к совету - учите азы (пока даже не программирования на mql), а то, простите, чушь говорите. Где это вы видели открытие Sell по Ask и Buy по Bid ? Покажите - озолочусь. Расскажите пожалуйста что за инкрементальный путь вы используете? Что к чему прибавляете, чтобы добиться открытия Buy по Bid и Sell по Ask, не получая при этом ошибку?

З.Ы. Я уже лет десять вопросов тут не задаю - лишь отвечаю на них. И, тем более, вы говорите о моих вопросах на форумах (да, кстати - ссылочку дайте) - во множественном числе. Так вот - я нахожусь только на этом, и нигде более.

Почитайте сначала вот это (хоть и там тоже есть некоторые недочёты).

Спасибо за спецификацию, я всё подправил. Но, проблему, с которой я сюда обратился, не  решена.
 
Игорь:
Спасибо за спецификацию, я всё подправил. Но, проблему, с которой я сюда обратился, не  решена.

Код покажите. Последний его вариант.

 
Artyom Trishkin:

Код покажите. Последний его вариант.

//+------------------------------------------------------------------+
//|                                    Test advisor on iDeMarker.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                         https:/goga342@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//------------------параметры советника -------------------------------
extern double lots=0.01; //
extern int Magic=111111111;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
   int ticket;

  //DeMarker
   double DM1,DM; 
   DM=iDeMarker(NULL,0,14,0);// 0 (1) бар
   DM1=iDeMarker(NULL,0,14,1);// 1 (2) бар

if(DM>0.3&&DM1<0.3&&CountBuy()<1) // открытие покупок
     {
      ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,0,0,0,NULL,Magic,0,CLR_NONE);
      
     }
 if(DM<0.7&&DM1>0.7&&CountBuy()>0) // закрытие покупок
    {
     for(int i=OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if(OrderMagicNumber()==Magic && OrderType()==OP_BUY)
               OrderClose(OrderTicket(),OrderLots(),Bid,3,clrNONE);
              // Print("    ");
           }
        }
        }
 //+------------------------------------------------------------------+
/*
   if(DM<0.7&&DM1>0.7&& CountSell()<1)// открытие продаж
     {
      ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,0,0,0,NULL,Magic,0,CLR_NONE);
      }
   if(DM<0.3&&DM1>0.3)// закрытие продаж
           {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
         {
         if(OrderType()==OP_SELL)
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
        }  
     }*/
   return(0);
  }
 //+------------------------------------------------------------------+
int CountBuy()// проверкна открытие ордеров на покупку
  {
   int count=0;

   for(int trade=OrdersTotal()-1; trade>=0; trade--)

     {
      if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
           {
            if(OrderType()==OP_BUY)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+       
int CountSell()//проверкна открытие ордеров на продажу
  {
   int count=0;

   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
           {
            if(OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------
 
Игорь:

Здравствуйте. Помогите разобраться с проблемой закрытия ордеров (ордера не закрываются), данная система основана на индикаторе DeMarker. При тесте, ошибок нет, только 1 предупреждение. Прошу просто разъяснить мне про OrderClose. Просьба закрытия ордеров в виде отдельных функций пока не предлагать (это будет следующий этап).

для того чтобы закрыть ордер, его нужно сначала выбрать!

У Вас ордер не выбран

по крайней мере в первом коде

Последний надеюсь работает?

 
Игорь:

Показания индикатора DeMarker берутся с нулевого бара. А там могут вовсе не те значения, которые видны на истории. Те же значения будут только в том случае, если всегда оперировать сформированными барами (индексы 1 и 2 соответственно).

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

 
Ihor Herasko:

Показания индикатора DeMarker берутся с нулевого бара. А там могут вовсе не те значения, которые видны на истории. Те же значения будут только в том случае, если всегда оперировать сформированными барами (индексы 1 и 2 соответственно).

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

Оператор Print подправил
 
//+------------------------------------------------------------------+
//|                                    Test advisor on iDeMarker.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                         https:/goga342@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//------------------параметры советника -------------------------------
extern double lots=0.01; //
extern int Magic=111111111;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
   int ticket;

  //DeMarker
   double DM1,DM; 
   DM=iDeMarker(NULL,0,14,0);// 0 (1) бар
   DM1=iDeMarker(NULL,0,14,1);// 1 (2) бар

if(DM>0.3&&DM1<0.3&&CountBuy()<1) // открытие покупок
     {
      ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,0,0,0,NULL,Magic,0,CLR_NONE);
      
     }
 if(DM<0.7&&DM1>0.7&&CountBuy()>0) // закрытие покупок
 Print("Print(DM)=",DM,"Print(DM1)=",DM1, "Print(CountBuy())=",CountBuy() );
    {
     for(int i=OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if(OrderMagicNumber()==Magic && OrderType()==OP_BUY)
               OrderClose(OrderTicket(),OrderLots(),Bid,3,clrNONE);
              Print( "OrderClose(OP_BUY) #", ticket);
              
           }
        }
        }
 //+------------------------------------------------------------------+
/*
   if(DM<0.7&&DM1>0.7&& CountSell()<1)// открытие продаж
     {
      ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,0,0,0,NULL,Magic,0,CLR_NONE);
      }
   if(DM<0.3&&DM1>0.3)// закрытие продаж
           {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
         {
         if(OrderType()==OP_SELL)
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
        }  
     }*/
   return(0);
  }
 //+------------------------------------------------------------------+
int CountBuy()// проверкна открытие ордеров на покупку
  {
   int count=0;

   for(int trade=OrdersTotal()-1; trade>=0; trade--)

     {
      if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
           {
            if(OrderType()==OP_BUY)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+       
int CountSell()//проверкна открытие ордеров на продажу
  {
   int count=0;

   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
           {
            if(OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------