Доработка ботов (советников, индикаторов) vol. 2

dOK-45

Новичок форума
Господа программисты, доброго дня!
Сов в настройках, куда лазил тоже. При таких настройках выдает 4051 ошибку в журнале. Просьба доковырять, чтобы этого не было
куда лез.pngошибка.png
 

Вложения

  • cm-Lock-0,01.mq4
    3,5 КБ · Просмотры: 18

dOK-45

Новичок форума
Господа программисты, доброго дня!
Сов в настройках, куда лазил тоже. При таких настройках выдает 4051 ошибку в журнале. Просьба доковырять, чтобы этого не было
Посмотреть вложение 396316Посмотреть вложение 396318
и еще.png
UPD
советник работает так как надо
но в журнале еще и эта ошибка нарисовалась
 

DomovenokBrest

♔♕♖♗♘♙

Вложения

  • Все коды ошибок (Error) в MetaTrader 4. Описание.txt
    3,4 КБ · Просмотры: 33

dOK-45

Новичок форума
131 - Неправильный объем
Да это здорово, меня пока банят мои мозги))
нашел вот это

Почему возникает ошибка 131. Например наш советник хочет открыть ордер с лотом 0,23. Но в МаркетИнфо уже забито что минимальный лот 0,10, а шаг изменения лота например 0,05. То есть мы может открывать лот начиная с 0,10, далее 0,15 0,20 0,25 0,30 и тд. Но нужный нам лот 0,23 не попадает в этот список, поэтому и возникает ошибка 131.

Предлагаю вам рассмотреть во такой код.

if (lot < MarketInfo(Symbol(),MODE_MINLOT)) lot = MarketInfo(Symbol(),MODE_MINLOT); // проверяем чтобы наш лот НЕ был меньше минимального

if (lot > MarketInfo(Symbol(),MODE_MAXLOT)) lot = MarketInfo(Symbol(),MODE_MAXLOT); // проверяем чтобы наш лот НЕ был больше максимального

double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP); // это шаг лота

lot = (int)(lot/lotstep) * lotstep; /// вот такая вот формула (лот делим на шаг, округляем до целых, и умножаем на шаг)

lot = NormalizeDouble(lot,2);

потыркался с куском этим, а куда приткнуть не знаю, поэтому и прошу помощи у тех кто понимает
 
Последнее редактирование модератором:

dOK-45

Новичок форума
131 - Неправильный объем
Изначально советник ставил лок каждой позиции, после моих криворуких изменений(насколько я читаю код) принцип как он стал работать, верный, но видимо редактировать код надо везде, а как это сделать я не знаю
 

Вложения

  • 1111.png
    1111.png
    111,5 КБ · Просмотры: 62

mobidik

-----
Изначально советник ставил лок каждой позиции, после моих криворуких изменений(насколько я читаю код) принцип как он стал работать, верный, но видимо редактировать код надо везде, а как это сделать я не знаю
Изначально советник ставил лок каждой позиции - не для каждой в отдельности, а для всех позиций по символу, это раз. Теперь, что такое лок - разница лотности противоположный позиций равна 0, т.е., в рынке лот бай = лот селл. А что делаете Вы: изначально, нужно сбалансировать новой позицией лотность в рынке и Вы уменьшаете эту лотность на величину 0,01 лота, т.е., баланса по лотности в рынке не станет, так как не достаточно лотности в 0,01 лота. На следующем тике советник будет пробовать установить вот эту не достающую лотность - 0,01, от которой Вы отнимаете значение в 0,01. Вопрос: позицию с какой лотность Вы пытаетесь установить?
 

dOK-45

Новичок форума
Изначально советник ставил лок каждой позиции - не для каждой в отдельности, а для всех позиций по символу, это раз. Теперь, что такое лок - разница лотности противоположный позиций равна 0, т.е., в рынке лот бай = лот селл. А что делаете Вы: изначально, нужно сбалансировать новой позицией лотность в рынке и Вы уменьшаете эту лотность на величину 0,01 лота, т.е., баланса по лотности в рынке не станет, так как не достаточно лотности в 0,01 лота. На следующем тике советник будет пробовать установить вот эту не достающую лотность - 0,01, от которой Вы отнимаете значение в 0,01. Вопрос: позицию с какой лотность Вы пытаетесь установить?
mobidik, спасибо за отклик
мне не нужен лок в полном понимании этого термина. Я пытался сделать следующую схему: BUY-SELL=0.01(0,02, и т.д - настройка), в зависимости от преобладающей по лотности позиций.
Головой я понимаю что написано, а вот как поправить по уму...
 

vladradon

Программист
мне не нужен лок в полном понимании этого термина.
Лок не есть что-т о однозначное - он может быть одним или несколькими ордерами, с учетом текущей просадки по торгующим ордерам и с учетом уровня безубытка, рассчитываться относительно текущей цены или цен (если торговля и балансировка идет по нескольким инструментам).
Если на одном инструменте нужно (учитывая все текущие ордера на этом инструменте) соблюсти "баланс" по лотам - нужно будет вычислить (возможно) для уравнивания лотности лоты добавочных ордеров, которые уровняют шансы и сбалансируют (возможно для обеих сторон).
Такой расчет (как в "оригинале") не правильный и уж точно не корректный. А ведь это не все нюансы по выставлению балансировочных ордеров.
Короче, для правильной балансировки нужен многофункциональный алгоритм, учитывающий многие нюансы. А разруливание лока - это еще более мутная тема.:cool:
 

dOK-45

Новичок форума
Лок не есть что-т о однозначное - он может быть одним или несколькими ордерами, с учетом текущей просадки по торгующим ордерам и с учетом уровня безубытка, рассчитываться относительно текущей цены или цен (если торговля и балансировка идет по нескольким инструментам).
Если на одном инструменте нужно (учитывая все текущие ордера на этом инструменте) соблюсти "баланс" по лотам - нужно будет вычислить (возможно) для уравнивания лотности лоты добавочных ордеров, которые уровняют шансы и сбалансируют (возможно для обеих сторон).
Такой расчет (как в "оригинале") не правильный и уж точно не корректный. А ведь это не все нюансы по выставлению балансировочных ордеров.
Короче, для правильной балансировки нужен многофункциональный алгоритм, учитывающий многие нюансы. А разруливание лока - это еще более мутная тема.:cool:
несомненно, эти вещи многогранны
то что меня подвело в торговле - то что осталось много ордеров в одном направлении, в то время как второе направление закрылось на ура
мысли были в сове которая при явном(а это бы высчитывалось разностью лотов) перекосе в одну сторону ставила бы лок
Естессно речь идет об одном инструменте и рыночных позициях
 

vladradon

Программист
несомненно, эти вещи многогранны
Естессно речь идет об одном инструменте и рыночных позициях
Я, может быть, напишу алгоритм, который будет "вылазить" из просадок за счет балансировки, но это не "сегодня"... - Теоретически - это бесполезная система будет, т.к. будет чисто математической основой здесь не обойтись...
 

dOK-45

Новичок форума
Я, может быть, напишу алгоритм, который будет "вылазить" из просадок за счет балансировки, но это не "сегодня"... - Теоретически - это бесполезная система будет, т.к. будет чисто математической основой здесь не обойтись...
11122.png
не совсем бесполезная, лок ставился при условии BUY-SELL=0.02, ну и наковырял модифицированный cm-Lock только на отложках и с коэффициетом их умножения, медленно отколол кусочек, брызгала ошибка 4051, но все закрылось
11122.png
 

mobidik

-----
лок ставился при условии BUY-SELL=0.02
Тогда все становится более понятным, я о Ваши телодвижениях в коде, да и решается элементарно: если дисбаланс по лотности между ордерами бай/селл менее заданного значения - ничего не делаем, т.е., лок не ставим. В коде это можно реализовать одной строчкой, плюс объявить одну переменную в настройках, например, extern double DeltaLot = 0.02; А вот эту строку: if(MathAbs(LS-LB)<DeltaLot) return; вставить в код сразу после комента и все будет как Вы желаете, пробуйте и все получиться.
И да, уберите свои "доработки" из кода.
 

Anna89

Новичок форума
Всем привет. Можете подсказать как мне прописать в советнике подсчет всех просадок до текущего дня( т.е. сегодняшний день не учитывая), и если сегодня сделки не закрылись а при наступлении следующего дня открылся новый ордер, то этот ордер открывался бы с увеличенным лотом( как в мартине). И при достижении 200 пунктов сделки все закрывались и текущие и предыдущие. Можно такое реализовать?
 

dOK-45

Новичок форума
Тогда все становится более понятным, я о Ваши телодвижениях в коде, да и решается элементарно: если дисбаланс по лотности между ордерами бай/селл менее заданного значения - ничего не делаем, т.е., лок не ставим. В коде это можно реализовать одной строчкой, плюс объявить одну переменную в настройках, например, extern double DeltaLot = 0.02; А вот эту строку: if(MathAbs(LS-LB)<DeltaLot) return; вставить в код сразу после комента и все будет как Вы желаете, пробуйте и все получиться.
И да, уберите свои "доработки" из кода.
mobidik, вот после слов плюс обьявить и далее вообще для меня темный лес.
и да я в MQL как паралитик на дискотеке
если это не совсем сложно и минута времени позволяет то очень был бы рад получить все собраное
 

mobidik

-----
Всем привет. Можете подсказать как мне прописать в советнике подсчет всех просадок до текущего дня( т.е. сегодняшний день не учитывая), и если сегодня сделки не закрылись а при наступлении следующего дня открылся новый ордер, то этот ордер открывался бы с увеличенным лотом( как в мартине). И при достижении 200 пунктов сделки все закрывались и текущие и предыдущие. Можно такое реализовать?
Сперва узнать цену открытия ордера и его лотность. Если позиция на бай, тогда узнать, начиная от момента открытия ордера до сегодняшнего дня, минимальное значение цены за выбранный период времени. Тогда сможете узнать насколько пипок цена уходила против позиции, зная её лотность - узнаете в деньгах. А там уже согласно вашего условия, в зависимости от величины просадки, зная лотность убыточной позиции, рассчитываете лотность для входа по мартину, как-то так, имхо.
 

mobidik

-----
mobidik, вот после слов плюс обьявить и далее вообще для меня темный лес.
и да я в MQL как паралитик на дискотеке
если это не совсем сложно и минута времени позволяет то очень был бы рад получить все собраное
:)
 

Вложения

  • cm-Lock-delta.mq4
    3,7 КБ · Просмотры: 53

vladradon

Программист
Можете подсказать как мне прописать в советнике подсчет всех просадок до текущего дня( т.е. сегодняшний день не учитывая), и если сегодня сделки не закрылись а при наступлении следующего дня открылся новый ордер, то этот ордер открывался бы с увеличенным лотом( как в мартине). И при достижении 200 пунктов сделки все закрывались и текущие и предыдущие. Можно такое реализовать?
Ну конечно можем! - Только и всего... набор-то советник среднего уровня - чисто подсказать весь код...:ROFLMAO:
 

bigbars16

Интересующийся
Можно у этого индикатора сделать так, чтобы для буфера 3 и 1 появлялся только первый сигнал, т.е. если поставить на бот, и поставить буфера 3 и 1 срабатывали не все сигналы, а только первый при каждом развороте

Вложения
 

Вложения

  • CCI - nrp - arrows alerts mtf.mq4
    14,8 КБ · Просмотры: 59

rms

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

Вложения

  • neutralizer.mqh
    13,8 КБ · Просмотры: 22
Верх