- Есть ли польза от друзей
- Как объединить два индикатора?
- Как соединить два советника
Скрипт это скрипт, а советник это советник.
Был бы код сказал бы как сделать удобней.
Сделать это можно довольно просто, если оформить код экспертов в виде функций:
......... // Список внешних переменных обоих экспертов ......... extern bool Expert_1 = true; extern bool Expert_2 = true; //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if (Expert_1) Expert_1(//Список фактических параметров эксперта 1); if (Expert_2) Expert_2(//Список фактических параметров эксперта 2); return(0); } //+------------------------------------------------------------------+ void Expert_1(//Список формальных параметров эксперта 1) { // Код эксперта 1 ......... return(0); } void Expert_2(//Список формальных параметров эксперта 2) { // Код эксперта 2 ......... return(0); }
Валерий, а есть ли какой нибудь советник на основе выше представленного шаблона? любой, абсолютно
на готовом коде мне будет проще разбираться, буду Вам очень признателен
Эксперт по предложенной схеме работал у меня на Automated Trading Championship 2007. Там в один эксперт были интегрированы два, один работал на H1 с рынка, другой - на H4 лимитниками, написанные в разное время. Поскольку оба давали профит на истории 2007, я и решил их объединить. Эксперт благополучно слил, хотя в начале несколько раз поднимался в первую десятку, и даже пятёрку, но потом, из-за возросшей краткосрочной волатильности фунта-йены, посыпались стоп-лоссы. Кстати, при прогоне на тестере, с отключенными H1 экспертом и трейлинг стопом, показал прибыль больше, чем у Bettera. Как говорят префферансисты: "Знал бы прикуп - жил бы в Сочи, не работал бы совсем."
Я вообже думаю, что внушительный успех Bettera достигнут не столько за счёт применения нейронных сетей, сколько за счёт изначально заложенной прибыльной стратегии + благоприятное развитие рынка. Ну, посмотрим на чемпионате 2008, удастся ли ему повторить свои результаты 2007 года.
Что касается кода эксперта, то он довольно грамоздкий, к тому же, часть кода я предполагаю использовать в новом эксперте, для Чемп. 2008, поэтому приведу только начало, чтобы была понятна суть, а внутренний код эксперта может быть любой.
#include <stdlib.mqh> #include <stderror.mqh> /*#import "MyLibrary.ex4" int Buy(string symbol, double Lots, double price, int slip, double sl, double tp, string comment,int magic ); int Sell(string symbol, double Lots, double price, int slip, double sl, double tp,string comment,int magic); int SetCanal(string symbol,int Period_X); int SetRevers(string symbol,int Period_X); #import*/ //---- input parameters extern int TakeProfit1 = 400; extern int TakeProfit2 = 330; extern int StopLoss1 = 200; extern int StopLoss2 = 70; extern string _Param_Trailing_ = " --- Параметры трейлинг-стопа ---"; extern bool UseTrailing = true; extern int MinProfit1 = 90; extern int MinProfit2 = 35; extern int TrailingStop1 = 35; extern int TrailingStop2 = 35; extern int TrailingStep1 = 35; extern int TrailingStep2 = 100; extern int Distance = 17; extern double Lots = 0; extern int MaxOrders = 3; extern bool Конкурс = true; extern int PercentFreeMargin=30; extern int MAGIC1=12345; extern int MAGIC2=54321; extern int MA_Long_Period=22; extern int MA_Short_Period=4; extern int StochPeriod=5; extern bool StochSignal = false; extern bool In_on_extremum = true; extern bool In_on_cross = true; extern bool Close_of_Open = true; extern bool Out_on_extremum = true; extern bool Info = true; extern bool Screen=false; extern bool Signals=true; extern bool Expert_H4 = true; extern bool Expert_H1 = true; datetime TimeOpen1; datetime TimeOpen2; static int MADiffSatl_1_S,MADiffSatl_2_S,MADiffSatl_3_S,MADiffSatl_4_S,MADiffSatl_5_S,MADiffSatl_0_S; static int MADiffSatl_1_L,MADiffSatl_2_L,MADiffSatl_3_L,MADiffSatl_4_L,MADiffSatl_5_L,MADiffSatl_0_L; bool Finish=false; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void start() { int moda=0; if (Lots==0) moda=1; if (Expert_H1) Expert_H1(TakeProfit2,StopLoss2,MAGIC2,Lots,PercentFreeMargin,PERIOD_H1, UseTrailing,MinProfit2,TrailingStop2,TrailingStep2,2, MA_Long_Period,MA_Short_Period,Out_on_extremum,Close_of_Open); if (Expert_H4) Expert_H4(TakeProfit1,StopLoss1,UseTrailing,MinProfit1,TrailingStop1,TrailingStep1,Distance, Lots,PercentFreeMargin,PERIOD_H4,MAGIC1, MA_Long_Period,MA_Short_Period,In_on_extremum,In_on_cross,Close_of_Open, Info,Screen,Signals); return; } //Закрытие start() //+------------------------------------------------------------------+ //| Expert_H4 function | //+------------------------------------------------------------------+ //-------------------------- Expert_H4 ------------------------------------------------- void Expert_H4(int TakeProfit,int StopLoss,bool UseTrailing,int MinProfit,int TrailingStop,int TrailingStep,int Distance, double Lots,int PercentFreeMargin,int Period_X,int MAGIC, int MA_Long_Period,int MA_Short_Period,bool In_on_extremum,bool In_on_cross,bool Close_of_Open, bool Info,bool Screen,bool Signals) { int i,ticket,cmd,total,slippage=5,type,profit,FreeMargin,MarginLevel; double vol,OpenPrice; string symbol = Symbol(),name=""; int BuyCnt,SellCnt,LimitCnt; if (UseTrailing)TrailingPositions(symbol,MAGIC,PERIOD_H4,MinProfit,TrailingStop,TrailingStep); //---------------------------------------------------------------------------------------------------------------- //Проверка сигнала на открытие позиции //---------------------------------------------------------------------------------------------------------------- if (Finish)return; if (AccountEquity() < 1000) {Finish=true;Print("Finit a la komedia");return;} if (NewBar_H4()) //сменился бар PERIOD_H4 { //Print("New bar H4"); //SetCanal(symbol,Period_X); ......... // Код эксперта H4 } // Закрытие NewBar } //+------------------------------------------------------------------+ //| Expert_H1 function | //+------------------------------------------------------------------+ void Expert_H1(double TakeProfit,double StopLoss,int MAGIC,double Lots,int PercentFreeMargin,int Period_X, bool UseTrailing,int MinProfit,int TrailingStop,int TrailingStep,int MaxOrders, int MA_Long_Period,int MA_Short_Period,bool Out_on_extremum,bool Close_of_Open) { int i, ticket, total, slippage=5,type; double vol,profit; double risk=10; string symbol = Symbol(); int BuyCnt,SellCnt,LimitCnt; // Проверка трейлинг-стопа if (UseTrailing) TrailingPositions(symbol,MAGIC,PERIOD_H1,MinProfit,MinProfit,TrailingStep); ....... // Код на закрытие позиций //---------------------------------------------------------------------------------------------------------------- //Проверка сигнала на открытие позиции //---------------------------------------------------------------------------------------------------------------- if (AccountEquity() < 1000) {Finish=true;Print("Finit a la komedia");return;} if (NewBar_H1() && Minute()<3) //сменился бар { //Print("New bar H1"); ,,,,,,,,// Код на открытие позиций } return; } // Описания используемых функций .....
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования