Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1025

 
Tango_X:
Здравствуйте! Что такое MQL5InfoString или MQL5InfoInteger? Где об этом почитать? в справке не нашел!
Как-же искал что не смог найти?
Документация по MQL5: Проверка состояния / MQLInfoString
Документация по MQL5: Проверка состояния / MQLInfoString
  • www.mql5.com
Проверка состояния / MQLInfoString - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Как-же искал что не смог найти?

странно в редакторе напротив этой функции нажимаю F1 и ничего не показывает.. спасибо!

 
#include <Trade\Trade.mqh>

CTrade trader;
int OnInit()
  {

   trader.SetExpertMagicNumber(1);

   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
//---
  
  }
void OnTick()
  {
      Print("тикет ",OrderGetTicket(0));
      Print("магик ",OrderGetInteger(ORDER_MAGIC));
      if (OrderGetInteger(ORDER_MAGIC)==1)
      {
         trader.OrderDelete(OrderGetTicket(0));
      }
  }

После удаления ордера магик=1. Как быть?

 
ascerdfg:

После удаления ордера магик=1. Как быть?

Вы удалили ОТЛОЖЕННЫЙ ордер. Какая связь с тем, что magic равен "1"? Точнее, что именно не нравится или смущает?

 
Vladimir Karputov:

Вы удалили ОТЛОЖЕННЫЙ ордер. Какая связь с тем, что magic равен "1"? Точнее, что именно не нравится или смущает?

         trader.OrderDelete(OrderGetTicket(0));
Продолжает удалять несуществующие ордера
 
ascerdfg:
Продолжает удалять несуществующие ордера

По Вашему коду именно так и будет: Вы на каждом тике принудительно выдаёте команду на удаление ОТЛОЖЕННОГО ордера с тикетом "0".

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Vladimir Karputov:

По Вашему коду именно так и будет: Вы на каждом тике принудительно выдаёте команду на удаление ОТЛОЖЕННОГО ордера с тикетом "0".

нет, это не так, только если магик=1

 
ascerdfg:

нет, это не так, только если магик=1

Суть не меняется - Вы на каждом тике пытаетесь удалить отложенный ордер с тикетом "0".

А кто сказал, что у Вас на каждом тике есть отложенный ордер с тикетом 0? А Вы проверили, вообще сколько отложенных ордеров? А откуда Вы взяли, что ....?

 
Vladimir Karputov:

Суть не меняется - Вы на каждом тике пытаетесь удалить отложенный ордер с тикетом "0".

А кто сказал, что у Вас на каждом тике есть отложенный ордер с тикетом 0? А Вы проверили, вообще сколько отложенных ордеров? А откуда Вы взяли, что ....?

С каким тикетом "0"??? OrderGetTicket(0) не означает что выбран ордер с тикетом 0, а возвращает тикет ордера из списка отложенных ордеров под индексом 0.

 
ascerdfg:


Вероятно Вам необходимо более точно сформулировать задачу.

Например так: если есть отложенный ордер у которого magic равен "1" - тогда удалить его.

В таком случае реализация будет такой:

#include <Trade\Trade.mqh>

CTrade trader;
int OnInit()
  {

   trader.SetExpertMagicNumber(1);

   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
//---
  
  }
void OnTick()
  {
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(OrderGetTicket(i)>0)     // selects the pending order by index for further access to its properties
         if(OrderGetInteger(ORDER_MAGIC)==1)
            trader.OrderDelete(OrderGetTicket(i));
  }

Обход в цикле всех отложенных ордеров

   Если удалось выбрать отложенный ордер (возвращаемое значение - тикет больше нуля)

      Если magic выбранного отложенного ордера равен "1"

         Удалить его