Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как вариант, подскажите как прописать эту функцию удаления в данное условие.
нужно санчала определить тикет отложки, которую необходимо удалить
если тикет равен нулю или не определен - тогда удаление не производить
Это для разных ордеров. Функция удаления одного по условию, удаление другого без условия.
Вопрос в том почему в моем случае функция удаления когда без условия успешно работает а если поставить ее в условие то выдает ошибку при наступлении условия.
нужно санчала определить тикет отложки, которую необходимо удалить
если тикет равен нулю или не определен - тогда удаление не производить
Так определены, один ticketD, другой ticketUP.
Или я что-то путаю?
Так определены, один ticketD, другой ticketUP.
Или я что-то путаю?
Как она может быть определена, если ticketUP уже удален?
Удалили, обновите ticketUP до нужного Вам состояния, при котором условие на удаление отложки не сработает, а это условие еще и добавить в код нужно
Как она может быть определена, если 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==-1) Print("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==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
OrderDelete(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==-1) Print("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==-1) Print("ERROR OP_SELL"); else Print("OP_SELL OK");}
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
OrderDelete(ticketUP);
Если я путаю, то что?
Дак у Вас опять команда без условия:
OrderDelete(ticketUP);
Почему код не изменили?
Возьмите тайм-аут на "подумать" хотя бы и разберитесь + почитайте то что Вам писали, какие советы дали.
Кстати, тут фриланс есть, если не получается...
Дак у Вас опять команда без условия:
OrderDelete(ticketUP);
Почему код не изменили?
Возьмите тайм-аут на "подумать" хотя бы и разберитесь + почитайте то что Вам писали, какие советы дали.
Кстати, тут фриланс есть, если не получается...
Он без условия - потому что так удаление происходит, а с условием - нет. Так записал чтоб указать на то что у меня не получается. Те если записать так:
OrderDelete(ticketD);
OrderDelete(ticketUP);
То на каждом тике происходит удаление ранее созданных на каждом тике (по условию отсутствия) ордеров. А если записать с условием:
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
То при наступлении условия пишет ошибку удаления.
Как в это условие записать удаление указанных ордеров?
Он без условия - потому что так удаление происходит, а с условием - нет. Так записал чтоб указать на то что у меня не получается. Те если записать так:
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")
Кстати, там и посмотрите (в глобальных) - что у Вас творится, какой тикет записался
Я думаю, что после этого всё у Вас заработает как надо
{
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 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
Что я делаю не так? Заранее спасибо!