Подскажите как в условии открытия позиции правильно задать проверку на то - существует ли открытая поза по данному инструменту или нет. И если поза по инструменту есть(любая селл или бай), то открытие не происходит в противном случае сигнал на открытие отрабатывается?
Вот код (как я думаю, отвечающий за открытие поз):
Вроде по логике правильно, но не работает все равно открывает по несколько поз по одному инструменту.
P.S. Я не программист. Если можно поподробнее объясните чайнику.
Это не сложно. Лучше всего организовать 2 подпрограммы, которые подсчитывают ордера.
// =================================================================================================// ************************* Счётчики ордеров ******************************************************// =================================================================================================//=========== SchBuy() ===============================// Функция возвращает количество Buy-ордеров// SchBuy - счётчик Buy ордеров//-----------------------------------------------------------int SchBuy(int MAGIC){
string SMB=Symbol();
int SchBuy=0;
int i;
for (i=OrdersTotal()-1;i>=0;i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
else {
if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGIC){ continue;}
if(OrderType()==OP_BUY){
SchBuy++;
}
}
}
return(SchBuy);
}
//==================================================================================================//=========== SchSell() ===============================// Функция возвращает количество Sell-ордеров// SchSell - счётчик Sell ордеров//-----------------------------------------------------------int SchSell(int MAGIC){
string SMB=Symbol();
int SchSell=0;
int i;
for (i=OrdersTotal()-1;i>=0;i--){
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
else {
if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue;}
if(OrderType()==OP_SELL){
SchSell++;
}
}
}
return(SchSell);
}
//==================================================================================================
Далее, в самом коде пришем:
if(SchBuy(MAGIC)+SchSell(MAGIC)<=0){
// ордеров нет - устанавливаем ордер при наличии торгового сигнала
}
Константу MAGIC лучше объявить в пользовательских переменных. Вот так:
externint MAGIC=467223; // У ордеров открытых вручную MAGIC=0
volshebnik: Доброе утро ! Может, мой вопрос по поводу того, что не идёт оптимизация - сложный или не представляет никакого интереса ?
Возможных причин для этого множество. Начиная от тривиального - отсутствие истории до варианта - нет прибыльных вариантов. Хотя может бть и проще - ошибка в советнике
Скажите пожалуйста, если робот создает отложенные ордера.
Команды по отложенным ордерам псылаются на сервер.
Отображаются ли на терминале отложенные ордера поставленные в очередь?
Таж же, как и если бы я установил отложенные ордера вручную? открытые ордера сверху, снизу отложенные ордера поставленные в очередь?
Что значит поставленные в очередь? Советник посылает серверу приказ установить отложенный ордер. Если с параметрами приказа всё в порядке, то сервер устанавливает отложку, что тут же отображается в терминале. Если советник посылает приказ расставить отложки с определённым шагом (делает это через цикл), то каждый новый приказ обрабатывается сервером отдельно. Именно приказы встают в очередь - советник приказал - сервер ответил. Советник снова приказал и снова ждёт ответа сервера.
Что значт ордера, поставленные в очередь? Что Вы под этим подразумеваете?
Возможных причин для этого множество. Начиная от тривиального - отсутствие истории до варианта - нет прибыльных вариантов. Хотя может бть и проще - ошибка в советнике
Я проверил - история минуток есть с 1999 года. Галочка стоит показывать все варианты (неприбыльные тоже). Ставлю на оптимизацию даже только один параметр МА, например от 100 до 110 и всё - оптимизация "умирает" - нет ни результатов, ни графика.... Не говоря уже о включении других параметров.
volshebnik: Я проверил - история минуток есть с 1999 года. Галочка стоит показывать все варианты (неприбыльные тоже). Ставлю на оптимизацию даже только один параметр МА, например от 100 до 110 и всё - оптимизация "умирает" - нет ни результатов, ни графика.... Не говоря уже о включении других параметров.
Надо советник смотреть. Так ничего сказать не получится
Подскажите как в условии открытия позиции правильно задать проверку на то - существует ли открытая поза по данному инструменту или нет. И если поза по инструменту есть(любая селл или бай), то открытие не происходит в противном случае сигнал на открытие отрабатывается?
Вот код (как я думаю, отвечающий за открытие поз):
Вроде по логике правильно, но не работает все равно открывает по несколько поз по одному инструменту.
P.S. Я не программист. Если можно поподробнее объясните чайнику.
Это не сложно. Лучше всего организовать 2 подпрограммы, которые подсчитывают ордера.
Далее, в самом коде пришем:
Константу MAGIC лучше объявить в пользовательских переменных. Вот так:
Попробовал
Это не сложно. Лучше всего организовать 2 подпрограммы, которые подсчитывают ордера.
Далее, в самом коде пришем:
Константу MAGIC лучше объявить в пользовательских переменных. Вот так:
Спасибо посмотрю, но для меня это наверное сложновато.
К этому посту я прицепил файл советника. Посмотрите.
Доброе утро ! Может, мой вопрос по поводу того, что не идёт оптимизация - сложный или не представляет никакого интереса ?
Возможных причин для этого множество. Начиная от тривиального - отсутствие истории до варианта - нет прибыльных вариантов. Хотя может бть и проще - ошибка в советнике
Скажите пожалуйста, если робот создает отложенные ордера.
Команды по отложенным ордерам псылаются на сервер.
Отображаются ли на терминале отложенные ордера поставленные в очередь?
Таж же, как и если бы я установил отложенные ордера вручную? открытые ордера сверху, снизу отложенные ордера поставленные в очередь?
Скажите пожалуйста, если робот создает отложенные ордера.
Команды по отложенным ордерам псылаются на сервер.
Отображаются ли на терминале отложенные ордера поставленные в очередь?
Таж же, как и если бы я установил отложенные ордера вручную? открытые ордера сверху, снизу отложенные ордера поставленные в очередь?
Что значит поставленные в очередь? Советник посылает серверу приказ установить отложенный ордер. Если с параметрами приказа всё в порядке, то сервер устанавливает отложку, что тут же отображается в терминале. Если советник посылает приказ расставить отложки с определённым шагом (делает это через цикл), то каждый новый приказ обрабатывается сервером отдельно. Именно приказы встают в очередь - советник приказал - сервер ответил. Советник снова приказал и снова ждёт ответа сервера.
Что значт ордера, поставленные в очередь? Что Вы под этим подразумеваете?
Возможных причин для этого множество. Начиная от тривиального - отсутствие истории до варианта - нет прибыльных вариантов. Хотя может бть и проще - ошибка в советнике
Я проверил - история минуток есть с 1999 года. Галочка стоит показывать все варианты (неприбыльные тоже). Ставлю на оптимизацию даже только один параметр МА, например от 100 до 110 и всё - оптимизация "умирает" - нет ни результатов, ни графика.... Не говоря уже о включении других параметров.
Надо советник смотреть. Так ничего сказать не получится