![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
NoName |
![]()
Сообщение
#121
|
![]() Группа: Активный участник Сообщений: 514 Регистрация: 1.5.2006 Из: Украина, Кременчуг Пользователь №: 146 Спасибо сказали: 0 раз(а) ![]() |
![]() Если мы отключим советник, то у нас линия баланса перестанет рисоваться. Нечему будет отскакивать ![]() |
leonid553 |
![]()
Сообщение
#122
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
На реале - отключим. На демо - оставим!
Кстати - сегодня с утра - приятный сюрприз -! Наш советник приближается к удвоению начального депозита на демо! |
leonid553 |
![]()
Сообщение
#123
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
to NoName:
Вот ты писал недавно - "Сейчас мне хочется попробовать реализовать срабатывание советника не по открытию бара на "рабочем" (в нашем случае Н1) таймфрейме, а по открытию бара меньшего периода. Например М15 или даже М5. Тогда останется возможность тестирования и оптимизации на "Контрольных точках", но правда глубина истории по вышеназванным ТФ так же не велика." Я прикинул вот каким образом. Как уйти от случайности сигналов перцептрона? Мы работаем на н1 и сигналы берем с индикатора на этом же тф. Но наши стопы, - вовсе не соответствуют этому тф - н1 ! Для н1 более подошли бы стопы - = от 35 до 55, - но никак не 80/90 ! Переходить на тф н4 ? Но тогда в сделках по ценам открытия мы будем "упускать" профит, - как иногда вот сейчас на нашем счете.... Можно брать сигналы индикатора с н4, - а работать по ценам закрытия н1. А что если взять индикатор с большим периодом? Т.е. создать искусственно, - как бы имитацию большого периода? И оптимизировать все остальные параметры. Сделал это . Результат получился оч. удовлетворительным! На прибыли это отразилось, - в сторону увеличения на 15 % ! А вот просадка уменьшилась почти в 1.5 раза !!!!! Еще не вставил отсечку в версию с этим индикатором! ПрибыльныХ сделок за три года было 864, а убыточных всего 537, - прикинь! (при стопе=70) ! Ну а график баланса - изрядно выпрямляется ...! - Эскизы прикрепленных изображений |
leonid553 |
![]()
Сообщение
#124
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
to NoName:
По аналогии с обьединенной версией советника AI прикинул вот что. Система должна работать, если вместо реверсной версии мы просто вставим другую пару. Чтобы получился мультивалютный эксперт. По системе ST+ENV, я думаю, есть целесообразность такого решения. Попытался сделать это. Используя как образец обьединенную версию и Stoch_env_v3. В сыром виде получается пока так: Код /+---------------------------------------------------------------------+ //| mulutie.mq4 | //| Copyright © 2007, Tradersforum. | //| http://www.tradersforum.net.ru/ | //| NoName(-and) & Leonid553 | //+---------------------------------------------------------------------+ #property copyright "NoName(-and)& Leonid553" #property link "http://www.tradersforum.net.ru/" //---- input parameters extern string GBPUSD= "Параметры GBPUSD"; extern int MagicGBP=199; extern bool GBP=True; extern int GBPUSD_period=6; extern int GBP_Env_period=25; extern int GBP_Env_shift=1; extern double GBP_Env_deviation=20; extern int sl_GBPUSD = 70; extern int tp_GBPUSD = 70; extern string USDCHF= "Параметры USDCHF"; extern int MagicCHF=991; extern bool CHF=false; extern int USDCHF_period=5; extern int CHF_Env_period=25; extern int CHF_Env_shift=1; extern double CHF_Env_deviation=20; extern int sl_USDCHF = 82; extern int tp_USDCHF = 82; //-- Подключаемые модули --------------- #include <stdlib.mqh> #include <b-Lots.mqh> //Переменный лот //#include <VisualTestingTools.mq4> //визуализация //-------------------------------------- static int prevtime = 0; static int spread = 3; //-- int ExpertBars; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //vTerminalInit(); //---------------- ExpertBars = Bars; //---------------- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() /*{ bool isNewBar=false; if (ExpertBars !=Bars) {ExpertBars=Bars; isNewBar=true; } int _Order=isExpertOrder(); if (isNewBar) { if (_Order!=0) ZeroBarOrd=true; //есть ордер else ZeroBarOrd=false; //нет ордера }*/ { //vTerminalRefresh(); //------------------------------------------------------- bool isNewBar=false; if (ExpertBars !=Bars) {ExpertBars=Bars; isNewBar=true; } //------------------------------------------------------- if (isNewBar) { int spread = MarketInfo(Symbol(), MODE_SPREAD); //----------------------------------- //double gbp_Signal =perceptron (); //double chf_Signal =perceptron_r(); //----- Вывод информации на экран ----------------------------------------------------- string info=""; string on_off="-------------------------------------------------------------"+ "\r\n"; if (GBP) on_off=StringConcatenate (on_off," версия GBPUSD - включена. ", "\r\n"); else on_off=StringConcatenate (on_off," версия GBPUSD - отключена. ","\r\n"); if (CHF) on_off=StringConcatenate (on_off," версия USDCHF - включена. ", "\r\n"); else on_off=StringConcatenate (on_off," версия USDCHF - отключена. ", "\r\n"); //--------- info=StringConcatenate(info,on_off,"\r\n"); info=StringConcatenate(info,"\r\n"); //info=StringConcatenate(info, "Перцептрон прям.: ", GeneralSignal,"\r\n" ); //info=StringConcatenate(info, "Перцептрон реверс.: ", ReversSignal); //-- Comment(info); //------------------------------------------------------------------------------------- // for (int i=0; i<OrdersTotal(); i++) { double Stochastic_array[49]; //------заполняем массив значениями Stochastic----------------- int i=0; while (i<50) { Stochastic_array[i]= iStochastic(NULL, 0, GBPUSD_period, 3,3,MODE_SMA,0,MODE_MAIN, i); i++; } //------------------------------------------------------ ArraySetAsSeries(Stochastic_array,true); double En0_low=iEnvelopesOnArray(Stochastic_array,0, GBP_Env_period,0, GBP_Env_shift,GBP_Env_deviation,MODE_LOWER,0); double En0_up=iEnvelopesOnArray(Stochastic_array,0, GBP_Env_period,0, GBP_Env_shift,GBP_Env_deviation,MODE_UPPER,0); double Stochastic_0=iStochastic(NULL, 0, GBPUSD_period, 3,3,MODE_SMA,0,MODE_MAIN, 0); double Stochastic_1=iStochastic(NULL, 0, GBPUSD_period, 3,3,MODE_SMA,0,MODE_MAIN, 1); //=======================Начальное открытие ордера =============================== // ==================================================================================================== = } //isNewBar //---- return(0); } //+------------------------------------------------------------------+ //| The PERCEPTRON - a perceiving and recognizing function | //---------------------------------------------------------------------------------+ //---- Функция проверки наличия ордеров эксперта ----------------------------------+ //---------------------------------------------------------------------------------+ // false - ордеров данного эксперта нет; | // true - есть ордера данного эксперта; | //---------------------------------------------------------------------------------+ bool ExpertOrder (int VersionID){ //-- bool result=false; int _OrdersTotal=OrdersTotal(); //-- if (_OrdersTotal>0) { for (int n=0; n<_OrdersTotal; n++) { if (OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber()==VersionID) { result=true; break; } //Найден ордер принадлежащий эксперту else { result=false; } } } } else { result=false; } //--------------------- return(result); } //---------------------------------------------------------------------------------+ Трал пока не ставил - не к спеху! после компиллирования выдает одинаковую ошибку (20 раз) 'Cnt' - variable not defined Понятно что я и не рассчитывал с налёта получить результат. Да и для второй пары ещё не прицепил конверт на Стохастик. Возможно что упустил что-то - http://forum.mql4.com/ru/5661 Что по твоему на первый взгляд здесь не работает? --------------------------------------------------------------------------------- Всё ОК! Перечитал сейчас свой пост и сам увидел - где ошибка! Исправил. Скомпиллировалось! Сообщение отредактировал leonid553 - 1.8.2007, 11:20 |
NoName |
![]()
Сообщение
#125
|
![]() Группа: Активный участник Сообщений: 514 Регистрация: 1.5.2006 Из: Украина, Кременчуг Пользователь №: 146 Спасибо сказали: 0 раз(а) ![]() |
Не заметил вовремя этот пост. Но, смотрю, ты и без меня справился
![]() На будущее: variable not defined - переменная не определена. |
leonid553 |
![]()
Сообщение
#126
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Вставил трейлинг. Работает советник.
Но.... Не так, как надо. Похоже, он по ценам открытия работает. А не по всем тикам.... |
NoName |
![]()
Сообщение
#127
|
![]() Группа: Активный участник Сообщений: 514 Регистрация: 1.5.2006 Из: Украина, Кременчуг Пользователь №: 146 Спасибо сказали: 0 раз(а) ![]() |
Совершенно верно.
Всё что помещено в этих скобках будет срабатывать только при появлении нового бара: Код if (isNewBar) { } |
leonid553 |
![]()
Сообщение
#128
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Понятно. Спасибо.
|
leonid553 |
![]()
Сообщение
#129
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Убрал - if (isNewBar) { .... }
И заработал эксперт так как надо! Сейчас вставляю второй трал и цепляю конверт на стох для второй пары! Да! Насколько реально предусмотреть трейлинг отдельно для длинной и для короткой позиции? |
NoName |
![]()
Сообщение
#130
|
![]() Группа: Активный участник Сообщений: 514 Регистрация: 1.5.2006 Из: Украина, Кременчуг Пользователь №: 146 Спасибо сказали: 0 раз(а) ![]() |
Цитата Да! Насколько реально предусмотреть трейлинг отдельно для длинной и для короткой позиции? Для того что бы не править библиотеку с тралом можно поместить вот такой код в функцию Start(). Код if (UseTrailing == True) { bool fm; int err; double ldOpen=0; double ldTake=0; for (i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if (OrderType()==OP_BUY) { if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingBuy*Point) { if (OrderStopLoss()<Bid-(TrailingBuy+TrailingStep-1)*Point) { ldOpen=OrderOpenPrice(); ldTake=OrderTakeProfit(); if (IsTradeAllowed()) { fm=OrderModify(OrderTicket(), ldOpen, Bid-TrailingBuy*Point, ldTake, 0, clModifyBuy); if (!fm) { err=GetLastError(); Print("Error(",err,") modifying SL: "); } } } } } if (OrderType()==OP_SELL) { if (!ProfitTrailing || OrderOpenPrice()-Ask>TrailingSell*Point) { if (OrderStopLoss()>Ask+(TrailingSell+TrailingStep-1)*Point || OrderStopLoss()==0) { ldOpen=OrderOpenPrice(); ldTake=OrderTakeProfit(); if (IsTradeAllowed()) { fm=OrderModify(OrderTicket(), ldOpen, Ask+TrailingSell*Point, ldTake, 0, clModifySell); if (!fm) { err=GetLastError(); Print("Error(",err,") modifying SL: "); } } } } } } } } } А также не забыть объявить внешние переменные отвечающие за работу трала: Код extern string _Parameters_Trailing = "----- Параметры Трейлинга -----"; extern bool UseTrailing = false; // Использовать трейлинг extern bool ProfitTrailing = false; // Включать трейлинг когда получен профит extern TrailingBuy =20; // Размер трала для позиции Buy extern TrailingSell =20; // Размер трала для позиции Sell extern int TrailingStep = 2; // Шаг трейлинга |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 13.5.2025, 21:05 |