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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Игорь
347
Игорь  

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

//+------------------------------------------------------------------+
//|                                    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) // закрытие покупок
    {
    OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
     }
 //+------------------------------------------------------------------+
/*
   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)// закрытие продаж
     {
       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);
  }
//+------------------------------------------------------------------
Maxim Kuznetsov
13631
Maxim Kuznetsov  
Игорь:

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

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

лонги закрываются по Bid

для тестов можете вообще использовать OrderClosePrice(), чтобы голову не ломать Ask там или Bid

Alexey Viktorov
27790
Alexey Viktorov  

То что не та цена указана, это пол-беды. А вот перед использованием параметров ордера, OrderTicket, OrderLots и других, надо ордер выбрать функцией OrderSelect


Maxim Kuznetsov:

лонги закрываются по Bid

для тестов можете вообще использовать OrderClosePrice(), чтобы голову не ломать Ask там или Bid

OrderClosePrice можно использовать и в рабочем советнике, только надо чётко понимать какие меры предпринять на случай ошибки исполнения. Тут RefreshRates не поможет. Надо повторно выбрать ордер.

Игорь
347
Игорь  
Alexey Viktorov:

То что не та цена указана, это пол-беды. А вот перед использованием параметров ордера, OrderTicket, OrderLots и других, надо ордер выбрать функцией OrderSelect


OrderClosePrice можно использовать и в рабочем советнике, только надо чётко понимать какие меры предпринять на случай ошибки исполнения. Тут RefreshRates не поможет. Надо повторно выбрать ордер.

Спасибо за помощь
Игорь
347
Игорь  
//+------------------------------------------------------------------+
//|                                    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,Bid,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)
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,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);
  }
//+------------------------------------------------------------------

Устранил все замечания. При тесте сделки так же  не закрываются. Ещё выявил  другую проблему три тесте, при запуске данного кода, данный код открыл 1-ю позицию после значительного пропуска заданного временного периода.

Artyom Trishkin
Модератор
56528
Artyom Trishkin  
Игорь:

Устранил все замечания. При тесте сделки так же  не закрываются. Ещё выявил  другую проблему три тесте, при запуске данного кода, данный код открыл 1-ю позицию после значительного пропуска заданного временного периода.

ticket=OrderSend(Symbol(),OP_BUY,lots,Bid,0,0,0,NULL,Magic,0,CLR_NONE);

Buy открывается по цене Ask, Sell - по цене Bid. А у вас?

Игорь
347
Игорь  
Artyom Trishkin:

Buy открывается по цене Ask, Sell - по цене Bid. А у в

Artyom Trishkin:

Buy открывается по цене Ask, Sell - по цене Bid. А у вас?

Данный косяк подправил (но на работу кода он не повлиял). Вопрос остаётся открытым "Как закрыть позицию при определённом условии, без модификации ордера"?


Artyom Trishkin
Модератор
56528
Artyom Trishkin  
Игорь:
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,clrNONE))

О Боже... Вам сначала нужно азы изучить. Buy закрывается по Bid, Sell закрывается по Ask

Игорь
347
Игорь  
Artyom Trishkin:

О Боже... Вам сначала нужно азы изучить. Buy закрывается по Bid, Sell закрывается по Ask

Молодой человек. Давайте не будем указывать, что кому надо изучать. Вопрос был поставлен о закрытии позиций. Что касается открытия позиций, да открытие сделок на покупку происходит по  Ask. В тоже время если Вы откроете позицию на покупку по Bid, то программа МТ4 ошибок не выдаст и откроет позицию на покупку.Это значит, что нет чёткой привязки к открытию определённой  позиции к  Ask или Bid, это проверено инкрементальным путём. Что, касается лично Вас, я просмотрел какие вопросы Вы задаёте на форумах. Так что кому надо учится, это вопрос. И последние, если Вы такой спец, покажите это наглядно на данном примере как надо работать в MQL коде. Тогда, многие скажут, что данный человек действительно спец и к нему можно обратится за советами или платными заказами. А взять и нагадить на человека заочно, ума много не надо. Все мы были и будем учениками в какой то сфере деятельности. 

Artyom Trishkin
Модератор
56528
Artyom Trishkin  
Игорь:

Молодой человек. Давайте не будем указывать, что кому надо изучать. Вопрос был поставлен о закрытии позиций. Что касается открытия позиций, да открытие сделок на покупку происходит по  Ask. В тоже время если Вы откроете позицию на покупку по Bid, то программа МТ4 ошибок не выдаст и откроет позицию на покупку.Это значит, что нет чёткой привязки к открытию определённой  позиции к  Ask или Bid, это проверено инкрементальным путём. Что, касается лично Вас, я просмотрел какие вопросы Вы задаёте на форумах. Так что кому надо учится, это вопрос. И последние, если Вы такой спец, покажите это наглядно на данном примере как надо работать в MQL коде. Тогда, многие скажут, что данный человек действительно спец и к нему можно обратится за советами или платными заказами. А взять и нагадить на человека заочно, ума много не надо. Все мы были и будем учениками в какой то сфере деятельности. 

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

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

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

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

Требования и ограничения при проведении торговых операций - Приложения - Учебник по MQL4
Требования и ограничения при проведении торговых операций - Приложения - Учебник по MQL4
  • book.mql4.com
В таблицах указаны расчётные значения, ограничивающие проведение торговых операций при открытии, закрытии, установке, удалении и модификации ордеров. Для получения значения минимальной дистанции StopLevel и дистанции заморозки FreezeLevel необходимо вызвать функцию MarketInfo(). Требования. Правильные цены, используемые при осуществлении...
Alexey Viktorov
27790
Alexey Viktorov  
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий