Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1401

 
freemovpalm #:

Всем привет, помогите пожалуйста прикрутить мартингейл в советник, нужно после срабатывания стоплосса (получение убытка) и уже на новом сигнале (сова работает по индикатору) зайти с увеличенным лотом (умножить на коэфф). Я правильно понял, нужно сначала прописать событие - явление стоплоса (не знаю где и как), и там сделать математику с лотами (нужны доп. переменные)?

Например, добавить переменную - счётчик убыточных сделок подряд. При каждой убыточной сделке - увеличивается на 1, при каждой прибыльной - сбрасывается в 0.

И уже от этого счётчика ставить лот (например - умножать минимальный лот на 2 в степени этого счётчика).

Но мартингейл не сделает убыточную стратегию прибыльной.

 
JRandomTrader #:

Например, добавить переменную - счётчик убыточных сделок подряд. При каждой убыточной сделке - увеличивается на 1, при каждой прибыльной - сбрасывается в 0.

И уже от этого счётчика ставить лот (например - умножать минимальный лот на 2 в степени этого счётчика).

Но мартингейл не сделает убыточную стратегию прибыльной.

Спасибо, у стратегии в среднем 2 и максимум подряд 4 убытка бывает, вот и захотел мартин. Кстати есть у кого-нить пример такого счетчика, или сова работающая по такому же принципу как я описал? Я мог бы просто оттуда скопировать нужные строки.

 
string Button_TP = "Panel.String1.Button3";

Print(ObjectGetInteger(0, "Panel.String1.Button3", OBJPROP_STATE));
Print(ObjectGetInteger(0, Button_TP, OBJPROP_STATE));

Подскажите, почему работает первый вариант и не работает второй? Разве нельзя задать имя кнопки в переменную?

 

Как в тестере автоматизировать проход по нескольким парам?
Например, надо пройти по 20 парам. Сейчас перезапускаю тестер для каждой пары.
Не могу сообразить как сделать symbol переменной.

Есть какие то решения?

 
Evgeny Dyuka #:

Как в тестере автоматизировать проход по нескольким парам?
Например, надо пройти по 20 парам. Сейчас перезапускаю тестер для каждой пары.
Не могу сообразить как сделать symbol переменной.

Есть какие то решения?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как получить выбранные пары для обзора рынка в тестере стратегий?

Alexey Viktorov, 2022.04.14 17:11

MarketWatch терминала из тестера недоступен. В тестере формируется сой MarketWatch из символов свойства которых были запрошены из программы. Следовательно, чтобы сформировать MarketWatch нужно запросить любое свойство нужного символа.

sinput  string  Symb  = "GBPUSD,GBPAUD,GBPCAD,GBPJPY,EURUSD,EURGBP,EURAUD,EURCAD,EURJPY,AUDUSD,AUDNZD,AUDCAD,AUDJPY,NZDUSD,NZDCAD,USDCAD,USDJPY"
string s_arr[];
int OnInit()
{
  int i = 0, symbPos = 0;
  if(StringSplit(Symb, ',', s_arr) <= 0)
   {
    Print(__FUNCTION__ + " Error converting !");
    return(INIT_FAILED);
   }
  while(symbPos >= 0  && !IsStopped())
   {
    if(!SymbolInfoInteger(s_arr[i], SYMBOL_SELECT) || !SymbolInfoInteger(s_arr[i], SYMBOL_VISIBLE))
      SymbolSelect(s_arr[i], true);
    double price = SymbolInfoDouble(s_arr[i], SYMBOL_ASK);
    i++;
   }
 return(INIT_SUCCEEDED);
}/*******************************************************************/

Надеюсь не наделал ошибок при вытаскивании кода из своей программы…


 
Evgeny Dyuka #:

Как в тестере автоматизировать проход по нескольким парам?
Например, надо пройти по 20 парам. Сейчас перезапускаю тестер для каждой пары.
Не могу сообразить как сделать symbol переменной.

Есть какие то решения?

Если сделать так, что пара будет определяться параметром советника, который может меняться при оптимизации, то, чтобы запустить проход по нескольким парам, просто запускаем оптимизацию по этому параметру.
Этот параметр нельзя сделать типа string, но можно сделать int или enum.
По этому параметру при инициализации советника мы присваиваем другой своей строковой переменной имя нужного символа, соответствующего значению параметра.
В коде советника придется всюду, где используется Symbol() или _Symbol заменить её на свою переменную с именем пары.

Принцип понятен или нужен пример кода?

 
Evgeny Dyuka #:

Как в тестере автоматизировать проход по нескольким парам?
Например, надо пройти по 20 парам. Сейчас перезапускаю тестер для каждой пары.
Не могу сообразить как сделать symbol переменной.

Есть какие то решения?

мультитестер сабера решение, там и по инструментам и по настройкам можно задать проходы.

Библиотеки: MultiTester
Библиотеки: MultiTester
  • 2019.07.19
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: MultiTester
 
Yuriy Bykov #:

Если сделать так, что пара будет определяться параметром советника, который может меняться при оптимизации, то, чтобы запустить проход по нескольким парам, просто запускаем оптимизацию по этому параметру.
Этот параметр нельзя сделать типа string, но можно сделать int или enum.
По этому параметру при инициализации советника мы присваиваем другой своей строковой переменной имя нужного символа, соответствующего значению параметра.
В коде советника придется всюду, где используется Symbol() или _Symbol заменить её на свою переменную с именем пары.

Принцип понятен или нужен пример кода?

Супер! Перебирать оптимизатором мне в голову не пришло.

 
Yuriy Bykov #:

Если сделать так, что пара будет определяться параметром советника, который может меняться при оптимизации, то, чтобы запустить проход по нескольким парам, просто запускаем оптимизацию по этому параметру.
Этот параметр нельзя сделать типа string, но можно сделать int или enum.
По этому параметру при инициализации советника мы присваиваем другой своей строковой переменной имя нужного символа, соответствующего значению параметра.
В коде советника придется всюду, где используется Symbol() или _Symbol заменить её на свою переменную с именем пары.

Принцип понятен или нужен пример кода?

А как быть с OnTick() ?
Везде могу подставить свой символ, но OnTick() всегда будет браться из символа на котором запущен тестер.
Из справки: "
Событие  OnTick() генерируется ... при поступлении нового тика по символу, к графику которого прикреплен эксперт".

Тут не может возникнуть конфликта? Например, форекс остановился на выходные, а крипта нет.

 
Да, это проблема. Я с криптой не работал, поэтому про различие периодов разрешенной торговли не думал. Но можно в тестере поставить в качестве рабочего символа какую-то криптовалюту, а в советнике добавить (или не убирать) проверку, что торговля разрешена. После этого основная проблема в несовпадении времен прихода тиков по разным инструментам. Тут можно постараться выбрать инструмент, где тиков как можно больше, чтобы уменьшить погрешность результатов тестирования. В мультивалютных экспертах, которые работают, прикрепленные к одному графику, ситуация будет та же самая - OnTick() срабатывает только по основному инструменту. Чтобы корректно отслеживать событие наступление нового бара по разным символам в этом случае использую свою библиотеку New Bar Event.
New Bar Event
New Bar Event
  • www.mql5.com
Позволяет определить наступление события нового бара в мультивалютном советнике. В вызове OnTick() можно многократно проверять, наступило ли на этом тике событие для нужного инструмента (symbol) и периода графика (timeframe).
Причина обращения: