Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 31

 
Как вариант, подскажите как прописать эту функцию удаления в данное условие.
 
spoiltboy:
Как вариант, подскажите как прописать эту функцию удаления в данное условие.

нужно санчала определить тикет отложки, которую необходимо удалить

если тикет равен нулю или не определен - тогда удаление не производить

 
spoiltboy:

Это для разных ордеров. Функция удаления одного по условию, удаление другого без условия. 

Вопрос в том почему в моем случае функция удаления когда без условия успешно работает а если поставить ее в условие то выдает ошибку при наступлении условия.

условие подправить требуется, без условия нельзя, логи займут весь жесткий диск
 
Renat Akhtyamov:

нужно санчала определить тикет отложки, которую необходимо удалить

если тикет равен нулю или не определен - тогда удаление не производить

Так определены, один ticketD, другой ticketUP.

Или я что-то путаю?

 
spoiltboy:

Так определены, один ticketD, другой ticketUP.

Или я что-то путаю?

Как она может быть определена, если  ticketUP уже удален?

Удалили, обновите  ticketUP до нужного Вам состояния, при котором условие на удаление отложки не сработает, а это условие еще и добавить в код нужно

 
Renat Akhtyamov:

Как она может быть определена, если  ticketUP уже удален?

Удалили, обновите  ticketUP до нужного Вам состояния, при котором условие на удаление отложки не сработает, а это условие еще и добавить в код нужно

Так ордера с тикетами ticketD, другой ticketUP сначала создаются (по условию отсутствия), а после уже удаляются.

if (BuyLimitCount()==0 && BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
int ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);
if (ticketUP==-1Print("ERROR OP_BUY"); else Print("OP_BUY OK");}

if (SellLimitCount()==0 && SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
int ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1Print("ERROR OP_SELL"); else Print("OP_SELL OK");}

if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}

OrderDelete(ticketUP); 

 Если я путаю, то что? 

 
spoiltboy:

Так ордера с тикетами ticketD, другой ticketUP сначала создаются (по условию отсутствия), а после уже удаляются.

if (BuyLimitCount()==0 && BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
int ticketUP=OrderSend(Symbol(), OP_BUYLIMIT, lotB, minpr1, 3, slB, tpB, "", MagicB, 0, Red);
if (ticketUP==-1Print("ERROR OP_BUY"); else Print("OP_BUY OK");}

if (SellLimitCount()==0 && SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
int ticketD=OrderSend(Symbol(), OP_SELLLIMIT, lotS, maxpr1, 3, slS, tpS, "", MagicS, 0, Blue);
if (ticketD==-1Print("ERROR OP_SELL"); else Print("OP_SELL OK");}

if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}

OrderDelete(ticketUP); 

 Если я путаю, то что? 

Дак у Вас опять команда без условия:

OrderDelete(ticketUP); 

Почему код не изменили?

Возьмите тайм-аут на "подумать" хотя бы и разберитесь + почитайте то что Вам писали, какие советы дали.

Кстати, тут фриланс есть, если не получается...

 
Renat Akhtyamov:

Дак у Вас опять команда без условия:

OrderDelete(ticketUP); 

Почему код не изменили?

Возьмите тайм-аут на "подумать" хотя бы и разберитесь + почитайте то что Вам писали, какие советы дали.

Кстати, тут фриланс есть, если не получается...

Он без условия - потому что так удаление происходит, а с условием - нет. Так записал чтоб указать на то что у меня не получается.  Те если записать так: 

OrderDelete(ticketD);

OrderDelete(ticketUP); 

То на каждом тике происходит удаление ранее созданных на каждом тике (по условию отсутствия) ордеров. А если записать с условием:

if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);} 

То при наступлении условия пишет ошибку удаления. 

Как в это условие записать удаление указанных ордеров? 

 
spoiltboy:

Он без условия - потому что так удаление происходит, а с условием - нет. Так записал чтоб указать на то что у меня не получается.  Те если записать так: 

OrderDelete(ticketD);

OrderDelete(ticketUP); 

То на каждом тике происходит удаление ранее созданных на каждом тике (по условию отсутствия) ордеров. А если записать с условием:

if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);} 

То при наступлении условия пишет ошибку удаления. 

Как в это условие записать удаление указанных ордеров? 


Условие удаления отложек убирать нельзя!

 ticketUP и ticketD нужно записать в глобальные переменные при открытии отложки

GlobalVariableSet("ticketUP",ticketUP);

GlobalVariableSet("ticketD",ticketD);

и оттуда считать перед удалением отложки

ticketUP=GlobalVariableGet("ticketUP")

ticketD=GlobalVariableGet("ticketD")

Кстати, там и посмотрите (в глобальных) - что у Вас творится, какой тикет записался

Я думаю, что после этого всё у Вас заработает как надо

 
Здравствуйте! Кто поможет решить проблему, пишу врапер для динамического массива, вот код класс: 
class CArray
{  
private:
   template <typename T>
   T _array[];
   int _index;
   int _err;
   int _err_sys;
public:
   CArray(){_index = -1; _err = 0; _err_sys = 0;}
   ~CArray(){}
  // template <typename T>
   T operator[](int i){
      if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
      return (_array[i]);
   }
   T at(int i){  
      if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
      return (_array[i]);
   }
   void push_back(T value){
      _array[++_index] = value;
   }
};

часть кода программы:

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.1"
#property strict

#include "Array.mqh"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
CArray *array;


int OnInit()
  {
  int b = 1;
   array = new CArray();
   array.push_back(b);
   int a = array.at(0);
  
//---
   return(INIT_SUCCEEDED);
  }
...

После попытки запуска эксперта на реальных данных бьёт такую ошибку: internal error #-1005

Что я делаю не так? Заранее спасибо!