Ваши вопросы по языку MQL4

vladradon

Программист
Но есть один момент! как исправить код что бы Советник не реагировал на "шум" т.е. После открытия ордера как пример на BUY во время тренда ордера на Sell не открывались? и наоборот.
Строки 104 и 111 (if(b==0)...) нужно заменить на if(b==0 && s==0) обе. Тогда будет в рынке всегда только один ордер какого-то направления. В этом случае в строке 126 нужно убрать проверку на тип ордера. Короче проще самому переделать.
 

Вложения

  • Probnik1.mq4
    10,6 КБ · Просмотры: 21

MrGreen86

Гуру форума
Строки 104 и 111 (if(b==0)...) нужно заменить на if(b==0 && s==0) обе. Тогда будет в рынке всегда только один ордер какого-то направления. В этом случае в строке 126 нужно убрать проверку на тип ордера. Короче проще самому переделать.

лучше добавить строку перед индикаторами:
if(b>0 || s>0) return;
тогда будет работать в несколько раз быстрее.
 

Вложения

  • Probnik 2.mq4
    10,6 КБ · Просмотры: 25

KriKs-Fx

Интересующийся
Очень интересно ,но не совсем понятно в чём "фишка" такой строки! Как это ускоряет..?
 

MrGreen86

Гуру форума
Очень интересно ,но не совсем понятно в чём "фишка" такой строки! Как это ускоряет..?

Если ее поставить то она отсекает бесполезный вызов индиктаторов и их анализ когда уже есть ордер. Если сделать так как предложил vladradon то наоборот будет бесполезный вызов индикаторов и их анализ.

Для реальной работы это не критично у вас всего 4 вызова индикатора на тике. А вот для оптимизации это очень критично.
 

vladradon

Программист
Вы очень любезны Vladradon!!! Благодарю Вас!!!
Да, такой вариант ускорит оптимизацию, но если будет что-то добавляться в коде после команд открытия, то это уже работать не будет. Я не сканировал код на наличие ошибок и не менял в нем ничего изначально, т.к. он не полный и это просто пример. Но раз такая пьянка, везде, где идет сравнение со STOPLEVEL, сравнение >= нужно заменить на >, т.к. если будет равно (стоплосс или тейкпрофит), то не выставится - должен быть хотя бы на 1 больше.
 
Последнее редактирование:

KriKs-Fx

Интересующийся
Прогнал в тесторе с строкой if(b>0 || s>0) return и без неё! С одинаковыми TP-SL и разными TP-SL ордера открываются как надо. Но Советник упорно не хочет увеличивать TP в прибавление, умножение работает. STOPLEVEL, сравнение >= нужно заменить на >, не менял.
 

vladradon

Программист
Прогнал в тесторе с строкой if(b>0 || s>0) return и без неё! С одинаковыми TP-SL и разными TP-SL ордера открываются как надо. Но Советник упорно не хочет увеличивать TP в прибавление, умножение работает. STOPLEVEL, сравнение >= нужно заменить на >, не менял.
Вот запустил в тестере на Робофорексе с только прибавлением 0.01. На скрине первые сделки с прибавлением до первого профита. При минусовом профите происходит увеличение лота. А про увеличение ТР речи не было!
 

Вложения

  • Probnik1.png
    Probnik1.png
    61,7 КБ · Просмотры: 19
Последнее редактирование:

KriKs-Fx

Интересующийся
Возможно ещё добавить функции??? Как время у Вас будет и если не затруднит? P:S С Вами я начинаю улавливать суть... MQL :D
 

Вложения

  • Probnic_3.rar
    4,2 КБ · Просмотры: 20

KriKs-Fx

Интересующийся
if ( Ask <= PriceLow && CountBuy() == 0 ) 'CountBuy' - function not defined
if ( Bid >= PriceHigh && CountSell() == 0 ) 'CountSell' - function not defined
int CountBuy() 'CountBuy' - function can be declared only in the global scope
int CountSell() 'CountSell' - function can be declared only in the global scope

Объясните господа программисты в чём ошибка где "косяк?
 

vladradon

Программист
if ( Ask <= PriceLow && CountBuy() == 0 ) 'CountBuy' - function not defined
if ( Bid >= PriceHigh && CountSell() == 0 ) 'CountSell' - function not defined
int CountBuy() 'CountBuy' - function can be declared only in the global scope
int CountSell() 'CountSell' - function can be declared only in the global scope

Объясните господа программисты в чём ошибка где "косяк?
Во всем ошибка. Вообще не понятно что за функции и что они делают. Смысл уловить трудно даже мне.))) Тело функции int CountBuy(){...} должно быть вынесено в глобальное расположение, как и int CountSell(){...}. А какой смысл запускать заново эту функцию, если она была только что запущена из if - вообще не понятно.
 

KriKs-Fx

Интересующийся
С выносом я разобрался, а вот остальное пока загадка:facepalm: Всё делал типа.... по Науке!!!:D
 

Вложения

  • Test-3.rar
    1,2 КБ · Просмотры: 16

vladradon

Программист
С выносом я разобрался, а вот остальное пока загадка Всё делал типа.... по Науке!!!
А, ну это просто функции подсчета ордеров в рынке бай и селл. В строке
PHP:
f ( Ask <= PriceLow && CountBuy() == 0 ) ...
на месте 3-х точек должна быть команда на открытие ордера, к примеру, или набор команд типа из твоего пробника:
PHP:
if ( Ask <= PriceLow && CountBuy() == 0 )
   if(Stoch0>Signl0 && Stoch1<Signl1 && Stoch0<LevelBuy)
     if(OrderSend(Symbol(),OP_BUY,CountLots(OP_BUY),
        NormalizeDouble(Ask,Digits),slippage,0,0,NULL,Magic,0,clrNONE)==-1) 
     Print("Ошибка открытия ордера <<",(GetLastError()),">> ");
Строку со стохастиками можно просто удалить и тогда только первое условие будет выполняться. Ну а вместо CountLots(OP_BUY) можно просто поставить лот открываемого ордера.
 

KriKs-Fx

Интересующийся
Да функция подсчёта это понятно но если сделать компиляцию там одни предупреждения! И я не понял какой стохастик ?эксперт на тма.А в тесторе Вообще Опа... Всё встаёт в ступор на первом ордере ни ST ни TP.. и пипец:facepalm: Движений Ноль!!!
 

Вложения

  • TMA_Fair .mq4
    8,1 КБ · Просмотры: 16

KriKs-Fx

Интересующийся
Так данные с него сняты и прописаны. Вроде как по "науке" .Или я что то упустил....???
 

vladradon

Программист
Так данные с него сняты и прописаны. Вроде как по "науке" .Или я что то упустил....???
Я понятия не имею что и как у тебя снято - ты выложил индюка, а съем данных прописан в сове должен быть через iCustom и какие-то сравнения для сигнала входа на основе данных с индюка и т.д., как на примере стохастика я выложил выше и как сделано в пробнике - все однотипно и просто.
 
Верх