Узнайте больше о других "Торговых стратегиях" - страница 4

 
doshur: усреднение всегда хорошо, но когда у вас огромный размер лота и вы хотите выйти, может не быть объема для выхода по нужной вам цене.

когда выходят новости, я задаюсь вопросом, сможет ли эта система выжить, как Ауд в наши дни.

Имхо, все может выжить, если размер лота достаточно мал. Будет ли это стоить того для вас - это уже другой вопрос. Можете ли вы представить систему, которая может работать лучше на Aud в эти дни? Напоминаю, что это не тема о прибыльных системах других людей. Это тема, в которой, по моему замыслу, люди должны представить различных экспертов и проанализировать все хорошее и плохое о стратегии. Прибыльная или нет - не имеет значения.
 

Я обнаружил ошибку в функции YesLstTrdWin().

bool YesLstTrdWin(){
    if(!PositionSelect(CurSetSymbol)){return(false);}
    ulong   PosType=PositionGetInteger(POSITION_TYPE);
    ulong   PosOpTime=PositionGetInteger(POSITION_TIME);
    double  PosPrice=PositionGetDouble(POSITION_PRICE_CURRENT);
    HistorySelect(PosOpTime,TimeCurrent());
    int DealsTotal=HistoryDealsTotal();
    for(int i=DealsTotal-1; i>=0; i--){
        ulong DealTicket=HistoryDealGetTicket(i);
        ulong DealEntry=HistoryDealGetInteger(DealTicket,DEAL_ENTRY);
        if(DealEntry!=DEAL_ENTRY_IN){continue;}
        ulong DealMagic=HistoryDealGetInteger(DealTicket,DEAL_MAGIC);
        if(DealMagic!=SystemMagic1){continue;}
        string DealSymb=HistoryDealGetString(DealTicket,DEAL_SYMBOL);
        if(DealSymb!=CurSetSymbol){continue;}
        ulong  DealType=HistoryDealGetInteger(DealTicket,DEAL_TYPE);
        double DealPrice=HistoryDealGetDouble(DealTicket,DEAL_PRICE);
        if(DealType==DEAL_TYPE_BUY  && PosPrice>DealPrice){return(true);}
        if(DealType==DEAL_TYPE_SELL && PosPrice<DealPrice){return(true);} //This Line Was Left Out.
        return(false);
    }   return(false);
}

Я забыл последний чекер сделки на продажу, который привел к усреднению внутри диапазона позиции.

*Еще одно замечание: усреднение внутри и/или против диапазона может быть эффективной стратегией для трендовых систем.

 
Ubzen:

Я обнаружил ошибку в функции YesLstTrdWin().

Я забыл последний чекер сделки на продажу, который привел к усреднению внутри диапазона позиции.

*Еще одно замечание: усреднение внутри и/или против диапазона может быть эффективной стратегией для трендовых систем.

Привет, Убзен,

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

Должно ли это

if(TempDD>MaxDDCurency){return;}

быть вот так?

if(TempDD<=MaxDDCurency){return;}

И еще одно общее замечание. Как вы думаете, насколько надежны ценовые данные в тестере стратегий, особенно в том, что касается спреда?

PS: Я тоже скоро выложу свой вариант.

 

Вы также, кажется, называете

BrkEveEquity();

на тике. Разве вы не должны вызывать это из функции HighestEquity(), т.е. когда устанавливается новый максимум эквити. Извините, если мои комментарии покажутся не совсем корректными. Я еще не тестировал советника в тестере стратегий, но подумал, что смогу понять, о чем вы думали, когда писали это.

 
ssn: Привет, Ubzen, я видел эту тему некоторое время назад и собирался внести свой вклад, извините, что задержался. Надеюсь, это станет одним из тех мини-форумов в рамках mql5. Тот факт, что вы используете неоптимизированный случайный сигнал для получения стабильной прибыли, несомненно, многообещающий. Мне еще предстоит изучить сигнал, на самом деле я только сегодня увидел код и сразу перешел к вашей функции MaxDDCurrency(). В ней есть строка, которая, как мне кажется, может быть ошибкой...

Должно ли это быть так? И еще одно общее замечание. Как вы думаете, насколько надежны ценовые данные в тестере стратегий, особенно в том, что касается спреда? PS: Я тоже скоро выложу свой вариант.

Вся функция:

void MaxDDCurency(){
    int TempDD=AcountEquity-HighesEquity;
    if(TempDD>MaxDDCurency){return;}
    MaxDDCurency=TempDD;
}

1) Устанавливает Maximum DrawDown в валюте. Эта функция устанавливает одноименную глобальную переменную в значение -Negative наименьшая просадка в валюте счета. Поскольку ее значение отрицательно, вы должны думать в обратном направлении. Пример Highest_Equity=10,000. Капитал_счета=9,500. Мне нужна максимальная просадка в $ в размере -500. Получается [9,500 - 10,000]. Затем, если временная просадка меньше -500, я хочу, чтобы она была зарегистрирована как новый MaxDD.

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

3) Результат, который я получил, был первым результатом, который я получил после того, как собрал его вместе. После этого я провел другие тесты, которые оказались не слишком обнадеживающими. Но даже после 3 других тестов, которые я провел, система закончилась с небольшой прибылью или без прибыли. Но да, факт остается фактом: случайная, неоптимизированная система все же пережила кризис 2008 года и продержалась до 2012 года. Возможно, оптимизация такой системы может стать предметом дальнейшего изучения. Пример: ваше личное направление, **может быть хуже, чем случайное ;)

4) Конечно, опубликуйте систему, которую вы всегда считали интересной, и все, что вас беспокоит в этой системе. Я постараюсь предложить идеи, которые могли бы устранить эти проблемы.

 
ssn: Похоже, что вы также вызываете функцию On tick. Разве вы не должны вызывать это из функции HighestEquity(), т.е. когда устанавливается новый максимум эквити. Извините, если мои комментарии покажутся не совсем корректными. Я еще не тестировал советника в тестере стратегий, но решил понять, о чем вы думали, когда писали это.

Вся функция:

void BrkEveEquity(){
    if(SysMagTotCnt()!=0){return;}
    BrkEveEquity=HighesEquity;
    BrkEveEquTme=(int)TimeCurrent();
    SysCloseMode=false;
}
Безубыточный эквити я использую уже довольно давно. Иногда эта функция находится в функции Equity_High, но я полагаю, что давно удалил ее оттуда по следующим причинам. 1) Если Break-Even Equity находится внутри Equity_High, то мне не нужен BE, так как я могу просто использовать Equity_High вместо него. 2) Я хочу устанавливать Equity_High, когда достигается новый максимум Account_Equity, а не когда System_Magic_Total_Count==0. 3) Я хочу устанавливать Break_Even, когда все_символы закрыты. Это дает следующие преимущества при торговле в режиме Live. Когда вы закрываете все_позиции, вы можете пострадать от некоторого отрицательного проскальзывания. Ваша новая цель становится Equity_High + Target$$$ вместо Account_Balance + Target$$, например.
 

- Да, ДД отрицательный, я этого не видел. Спасибо

- Я думаю, что даже цены открытия на m1 имеют bid и ask. Если вы вошли по биду, вам придется выйти по аску (например, если вы шортили). Я провел тесты с данными mt5 и с пользовательским фиксированным спредом, и результаты разительно отличаются.

- Я думаю, что ваш подход со случайным сигналом - это то, что нужно, если ваш вход основан на технических факторах. Если вы можете избежать любой оптимизации, это должно быть лучше... Я думаю. ;)...

- Система, которую я опубликую, использует SOM... фактически это будет класс многоразового использования. Нужно сделать несколько последних доработок...

- Ладно, с BE все ясно. Теперь MinPerMinLot - это фиксированная переменная, которую вы используете для установки объема пропорционально времени, прошедшему с момента закрытия всех позиций?

Documentation on MQL5: Standard Constants, Enumerations and Structures / Indicator Constants / Price Constants
Documentation on MQL5: Standard Constants, Enumerations and Structures / Indicator Constants / Price Constants
  • www.mql5.com
Standard Constants, Enumerations and Structures / Indicator Constants / Price Constants - Documentation on MQL5
 
ssn:

- Да, ДД отрицательный, я этого не видел. Спасибо

- Я думаю, что даже цены открытия на m1 имеют bid и ask. Если вы вошли по биду, вам придется выйти по аску (например, если вы шортили). Я провел тесты с данными mt5 и с пользовательским фиксированным спредом, и результаты разительно отличаются.

- Я думаю, что ваш подход со случайным сигналом - это то, что нужно, если ваш вход основан на технических факторах. Если вы сможете избежать любой оптимизации, это будет лучше... Я думаю. ;)...

- Система, которую я опубликую, использует SOM... фактически это будет класс многоразового использования. Нужно сделать несколько последних доработок...

- Ладно, с BE все ясно. Теперь MinPerMinLot - это фиксированная переменная, которую вы используете для установки объема пропорционально времени, прошедшему с момента закрытия всех позиций?

1) Не за что.

2) Согласен. Хотелось бы исправить спреды в mt5. Но также важно тестировать с реалистичными спредами и не обманывать себя.

3) По моему опыту, при использовании оптимизированных систем, месячный живой тест обычно выглядит совершенно иначе, чем ожидаемые результаты. Этот способ тестирования обычно дает ожидаемую статистику во время моих живых тестов...., но также обычно умирает тем же способом, которым умирает в тестере стратегий.

4) k

5) Да. Вполне, но гораздо лучше рассматривать это как "поскольку эквити_счета было >= безубыточного эквити". Я убрал Set_Break_Even_Time из функции Break_Even_Equity. Я понял, что установка отдельных переменных с помощью собственной функции set_function работает гораздо более повторно, чем объединение в другую функцию set_function.

Далее я думаю сделать систему следования за трендом с добавлением лотов по мере развития тренда.

 
Ubzen:

1) Не за что.

2) Согласен. Хотелось бы исправить спреды в mt5. Но также важно тестировать с реалистичными спредами и не обманывать себя.

3) По моему опыту, при использовании оптимизированных систем, месячный живой тест обычно выглядит совершенно иначе, чем ожидаемые результаты. Этот способ тестирования обычно дает ожидаемую статистику во время моих живых тестов...., но также обычно умирает тем же способом, которым умирает в тестере стратегий.

4) k

5) Да. Вполне, но гораздо лучше рассматривать это как "поскольку эквити_счета было >= безубыточного эквити". Я убрал Set_Break_Even_Time из функции Break_Even_Equity. Я понял, что установка отдельных переменных с помощью собственной функции set_function работает гораздо более повторно, чем объединение в другую функцию set_function.

Далее я думаю сделать систему следования за трендом с добавлением лотов по мере развития тренда.

4)...
Файлы:
SignalSOM.mqh  24 kb
 
ssn: 4)...
??? Есть ли у вас дополнительные материалы в соответствии с правилами. Кажется, что #1, #3 и #4 отсутствуют.