1. Функция - предназначена для выбора команды от Сигнала.
//+------------------------------------------------------------------+ //| ENUM_TRADE_COMMAND | //+------------------------------------------------------------------+ enum ENUM_TRADE_COMMAND { close_open_b=24, // Close Sell + Open Buy close_open_s=25, // Close Buy + Open Sell };
input ENUM_TRADE_COMMAND InpLongOpened_1Command = close_open_b; // Buy command: input ENUM_TRADE_COMMAND InpShortOpened_1Command = close_open_s; // Sell command:
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ bool CSampleExpert::InpTradeCommand(int i) { bool res=false; //--- второй пример switch(i) { case Turn_Off:// TURN OFF ExtTurnOff=true; break; case tpl:// '.tpl' All ExttplAll=true; DeleteChart(); break; case Close_AllExt:// CloseAll + ExpertRemoves ExtAllCloseAll=true; NotifyAllCloseAll(""); ExpertRemove(); DeleteChart(); PlaySound("expert.wav"); break; case Close_All_All:// CloseAll ExtAllCloseAll=true; NotifyAllCloseAll(""); break; case close_tpl_b:// Close Sell + Open Buy + '.tpl' ExtNeedCloseSell=true; NotifyCrossingClosSell(""); ExtNeedOpenBuy=true; NotifyCrossingBuy(""); ExpertRemove(); DeleteChart_1(); break; case close_tpl_s:// Close Buy + Open Sell + '.tpl' ExtNeedCloseBuy=true; NotifyCrossingClosBuy(""); ExtNeedOpenSell=true; NotifyCrossingSell(""); ExpertRemove(); DeleteChart_1(); break; case close_all_tpl:// Close Buy's Sell's + '.tpl' ExtNeedCloseAll=true; NotifyLongShortClos(""); ExpertRemove(); DeleteChart_1(); break; case UpName:// Line Open UpName ExtUpName=true; Obj_BUYOpen(); break; case DownName:// Line Open DownName ExtDownName=true; Obj_SELLOpen(); break; case UpName_s:// Line Open UpName + Open Sell ExtUpName=true; Obj_BUYOpen(); ExtNeedOpenSell=true; NotifyCrossingSell(""); break; case UpName_b:// Line Open UpName + Open Buy ExtUpName=true; Obj_BUYOpen(); ExtNeedOpenBuy=true; NotifyCrossingBuy(""); break; case DownName_b:// Line Open DownName + Open Buy ExtDownName=true; Obj_SELLOpen(); ExtNeedOpenBuy=true; NotifyCrossingBuy(""); break; case DownName_s:// Line Open DownName + Open Sell ExtDownName=true; Obj_SELLOpen(); ExtNeedOpenSell=true; NotifyCrossingSell(""); break; case ClUpName:// Line Close UpName ClExtUpName=true; Obj_BUYClos(); break; case ClDownName:// Line Close DownName ClExtDownName=true; Obj_SELLClos(); break; case ClUpName_s:// Line Close UpName + Open Sell ClExtUpName=true; Obj_BUYClos(); ExtNeedOpenSell=true; NotifyCrossingSell(""); break; case ClUpName_b:// Line Close UpName + Open Buy ClExtUpName=true; Obj_BUYClos(); ExtNeedOpenBuy=true; NotifyCrossingBuy(""); break; case ClDownName_b:// Line Close DownName + Open Buy ClExtDownName=true; Obj_SELLClos(); ExtNeedOpenBuy=true; NotifyCrossingBuy(""); break; case ClDownName_s:// Line Close DownName + Open Sell ClExtDownName=true; Obj_SELLClos(); ExtNeedOpenSell=true; NotifyCrossingSell(""); break; case close_buys:// Close All Buy's ExtNeedCloseBuy=true; NotifyCrossingClosBuy(""); break; case close_sells:// Close All Sell's ExtNeedCloseSell=true; NotifyCrossingClosSell(""); break; case close_all:// Close All Buy's and Sell's ExtNeedCloseAll=true; NotifyLongShortClos(""); break; case open_buy:// Open Buy ExtNeedOpenBuy=true; NotifyCrossingBuy(""); break; case open_sell:// Open Sell ExtNeedOpenSell=true; NotifyCrossingSell(""); break; case close_open_b:// Close Sell + Open Buy ExtNeedCloseSell=true; NotifyCrossingClosSell(""); ExtNeedOpenBuy=true; NotifyCrossingBuy(""); break; case close_open_s:// Close Buy + Open Sell ExtNeedCloseBuy=true; NotifyCrossingClosBuy(""); ExtNeedOpenSell=true; NotifyCrossingSell(""); break; case open_buy_sell:// Open Buy and Sell ExtNeedOpenBuy=true; NotifyCrossingBuy(""); ExtNeedOpenSell=true; NotifyCrossingSell(""); break; } //--- result return(res); } //+------------------------------------------------------------------+
например от Индикатора
//+------------------------------------------------------------------+ //| Check for long position opening | //+------------------------------------------------------------------+ bool CSampleExpert::LongOpened_1(void) { bool res=false; //--- check for long position (BUY) possibility if(m_macd_current_1<m_signal_current_1) { InpTradeCommand(InpLongOpened_1Command); PlaySound("ok.wav"); //--- in any case we must exit from expert res=true; } //--- result return(res); } //+------------------------------------------------------------------+ //| Check for short position opening | //+------------------------------------------------------------------+ bool CSampleExpert::ShortOpened_1(void) { bool res=false; //--- check for short position (SELL) possibility if(m_macd_current_1>m_signal_current_1) { InpTradeCommand(InpShortOpened_1Command); PlaySound("ok.wav"); //--- in any case we must exit from expert res=true; } //--- result return(res); } //+------------------------------------------------------------------+
Такой Эксперт уже есть https://www.mql5.com/ru/code/30444
В Этот будет добавлено от четырёх линии Горизонтальных или Трендовых от их цвета, будет срабатывать команда из выбора команд.
Ещё от каждого выполнения каких либо действий Эксперта - можно настроить ( SendNotification https://www.mql5.com/ru/docs/network/sendnotification )и (SendMail https://www.mql5.com/ru/docs/network/sendmail)
if(EnableNotificationsBuy) SendNotification(msg); if(EnableEmailsBuy) SendMail(EAName+" EventBuy",msg); Print(msg);

- www.mql5.com
Вроде закончил склеивать Эксперта - Осталось проверить в рынке его работоспособность.
Так выглядит настраиваемая часть кода.
//+------------------------------------------------------------------+ //| Algorithm manually automate.mq5 | //| Copyright © 2021, Aleksandr Klapatyuk. | //| https://www.mql5.com/ru/users/sanalex | //+------------------------------------------------------------------+ #property copyright "Copyright © 2021, Aleksandr Klapatyuk" #property link "https://www.mql5.com/ru/users/sanalex" #define EAName "Algorithm manually automate" #define EAVersion "1.000" #property description "Copyright 2021, Strx" #property description "https://www.mql5.com/en/users/strx" #property description "Copyright © 2021, Vladimir Karputov" #property description "http://wmua.ru/slesar/" #property description "Klymenko Roman (needtome@icloud.com)" #property description "https://www.mql5.com/ru/users/needtome" #property description "Copyright © 2021, SEM " #property description "https://www.mql5.com/ru/users/seliveru" #property version EAVersion //--- #define MACD_MAGIC 7775613 //--- #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\PositionInfo.mqh> #include <Trade\AccountInfo.mqh> #include <Arrays\ArrayString.mqh> #include <ChartObjects\ChartObject.mqh> #include <ChartObjects\ChartObjectsLines.mqh> //+------------------------------------------------------------------+ //| ENUM_PROFIT_COMMAND | //+------------------------------------------------------------------+ enum ENUM_MODE { mode_All=0, // ВКЛ. mode_Ind=1, // ВЫКЛ. Фильтр }; //+------------------------------------------------------------------+ //| ENUM_PROFIT_COMMAND | //+------------------------------------------------------------------+ enum ENUM_P { tpl_b=0, // Close tpl_s=1, // Close + Open + '.tpl' }; //+------------------------------------------------------------------+ //| ENUM_FILTER_COMMAND | //+------------------------------------------------------------------+ enum ENUM_FILTR_COMMAND { Filter_Off=0, // OFF Filter_Stop=1, // Filter Line Up:Down Filter_All=2, // Filter Line Up:Down:Middle }; //+------------------------------------------------------------------+ //| ENUM_TRADE_COMMAND | //+------------------------------------------------------------------+ enum ENUM_TRADE_COMMAND { Turn_Off=0, // TURN OFF tpl=1, // '.tpl' All Close_AllExt=2, // CloseAll + ExpertRemoves Close_All_All=3, // CloseAll close_tpl_b=4, // Close Sell + Open Buy + '.tpl' close_tpl_s=5, // Close Buy + Open Sell + '.tpl' close_all_tpl=6, // Close Buy's Sell's + '.tpl' UpName=7, // Line Open UpName DownName=8, // Line Open DownName UpName_s=9, // Line Open UpName + Open Sell UpName_b=10, // Line Open UpName + Open Buy DownName_b=11, // Line Open DownName + Open Buy DownName_s=12, // Line Open DownName + Open Sell ClUpName=13, // Line Close UpName ClDownName=14, // Line Close DownName ClUpName_s=15, // Line Close UpName + Open Sell ClUpName_b=16, // Line Close UpName + Open Buy ClDownName_b=17, // Line Close DownName + Open Buy ClDownName_s=18, // Line Close DownName + Open Sell close_buys=19, // Close All Buy's close_sells=20, // Close All Sell's close_all=21, // Close All Buy's and Sell's open_buy=22, // Open Buy open_sell=23, // Open Sell close_open_b=24, // Close Sell + Open Buy close_open_s=25, // Close Buy + Open Sell open_buy_sell=26, // Open Buy and Sell }; //+------------------------------------------------------------------+ sinput group "----------------- Balans Parameters --------------------" sinput ENUM_TIMEFRAMES TimeFrame = PERIOD_CURRENT; // Change TimeFrame - Current = dont changed sinput string Template = "ADX"; // Имя шаблона(without '.tpl') sinput double TargetProfit = 1000000; // Баланс + Прибыль(прибавить к балансу) sinput double TargetLoss = 0; // Баланс - Убыток(отнять от баланса) sinput bool AllCloseAllNotifications = false; // AllCloseAllNotifications sinput bool AllCloseAllEmails = false; // AllCloseAllEmails sinput group "----------------- Balans Parameters 1 ------------------" sinput double TargetProfit_1 = 1000000; // Общая Прибыль Валюте '0'--> Нельзя sinput double TargetLoss_1 = 1000000; // Общий Убыток Валюте '0'--> Нельзя sinput group "----------------- Balans BUY+SELL ----------------------" sinput double TargetProfit_2 = 1000000; // BUY+SELL Прибыль Валюте '0'--> Нельзя sinput double TargetLoss_2 = 1000000; // BUY+SELL Убыток Валюте '0'--> Нельзя sinput group "----------------- TP SL In currency --------------------" sinput double InpTProfit = 40000; // In currency the amount Общий TP sinput double InpStopLoss = 1000000; // In currency the amount Общий SL sinput ENUM_P InpProfitCommand = tpl_b; // TP SL: command Close sinput string Template_1 = "Momentum"; // Имя шаблона(without '.tpl') sinput group "----------------- Lots Parameters ----------------------" sinput double InpLots1 = 0.01; // : Lots 1 sinput int InpLots_01 = 3000; // In currency the amount sinput double InpLots2 = 0.02; // : Lots 2 sinput int InpLots_02 = 6000; // In currency the amount sinput double InpLots3 = 0.04; // : Lots 3 sinput int InpLots_03 = 12000; // In currency the amount sinput double InpLots4 = 0.08; // : Lots 4 sinput group "----------------- Start Stop ---------------------------" sinput datetime HoursFrom = D'1970.01.02'; // 1 Время: старт sinput datetime HoursTo = D'1970.01.01'; // Время: стоп sinput datetime HoursFrom2 = D'1970.01.01'; // 2 Время: старт sinput group "----------------- Time:Start Stop ----------------------" sinput int HoursFrom1 = 0; // Время: старт sinput int HoursTo1 = 24; // Время: стоп sinput group "----------------- Obj: VLine:UP ------------------------" sinput ENUM_MODE FilterLine_1 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string InpObjVLineName = "Имя VLine"; // Name: VLine sinput ENUM_TRADE_COMMAND InpVLineCommand = Turn_Off; // VLine command: sinput group "----------------- Obj: VLine:DOWN ----------------------" sinput ENUM_MODE FilterLine_2 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string InpObjVLineNameD = "Имя VLine"; // Name: VLine sinput ENUM_TRADE_COMMAND InpVLineCommandD = Turn_Off; // VLine command: sinput group "----------------- Indicators: UP -----------------------" sinput bool InpIndicators_1 = false; // Indicators: Start (true) sinput ENUM_MODE FilterLine_3 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string short_name_1 = "Имя Индикатора"; // Name Indicators "UP" sinput int InpBars_1 = 1; // Bars sinput ENUM_TIMEFRAMES Period_1 = PERIOD_CURRENT; // Period Indicators sinput ENUM_TRADE_COMMAND InpLongOpened_1Command = close_open_b; // Buy command: sinput ENUM_TRADE_COMMAND InpShortOpened_1Command = close_open_s; // Sell command: sinput group "----------------- Indicators: DOWN ---------------------" sinput bool InpIndicators_2 = false; // Indicators: Start (true) sinput ENUM_MODE FilterLine_4 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string short_name_2 = "Имя Индикатора"; // Name Indicators "DOWN" sinput int InpBars_2 = 1; // Bars sinput ENUM_TIMEFRAMES Period_2 = PERIOD_CURRENT; // Period Indicators sinput ENUM_TRADE_COMMAND InpLongOpened_2Command = close_open_b; // Buy command: sinput ENUM_TRADE_COMMAND InpShortOpened_2Command = close_open_s; // Sell command: sinput group "----------------- Trailing Line:UP ---------------------" sinput bool InpStartOpen = false; // Start Trailing Line sinput ENUM_MODE FilterLine_5 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string InpObjUpNameOpen = "openup"; // Obj: Up (Trailing Horizontal Line) sinput ENUM_TRADE_COMMAND InpTradeCommandY1 = open_sell; // Trade command: sinput color InpObjUpclrOpen = clrBlue; // Obj: command: MonitoringColor, EA only monitors this lines color sinput ENUM_MODE FilterLine_6 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string InpObjDownNameOpen = "opendown"; // Obj: Down (Trailing Horizontal Line) sinput ENUM_TRADE_COMMAND InpTradeCommandU1 = open_buy; // Trade command: sinput color InpObjDownclrOpen = clrRed; // Obj: command: MonitoringColor, EA only monitors this lines color sinput double InpObjTrailingStopOpen = 0; // Obj: Trailing Stop (distance from price to object, in pips) sinput double InpObjTrailingStepOpen = 0; // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips) sinput group "----------------- Trailing Line:DOWN -------------------" sinput bool InpStartClos = false; // Start Trailing Line sinput ENUM_MODE FilterLine_7 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string InpObjUpNameClos = "closup"; // Obj: Up (Trailing Horizontal Line) sinput ENUM_TRADE_COMMAND InpTradeCommandY2 = close_sells; // Trade command: sinput color InpObjUpclrClos = clrBlue; // Obj: command: MonitoringColor, EA only monitors this lines color sinput ENUM_MODE FilterLine_8 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string InpObjDownNameClos = "closdown"; // Obj: Down (Trailing Horizontal Line) sinput ENUM_TRADE_COMMAND InpTradeCommandU2 = close_buys; // Trade command: sinput color InpObjDownclrClos = clrRed; // Obj: command: MonitoringColor, EA only monitors this lines color sinput double InpObjTrailingStopClos = 0; // Obj: Trailing Stop (distance from price to object, in pips) sinput double InpObjTrailingStepClos = 0; // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips) sinput group "----------------- Buy::UP ------------------------------" sinput ENUM_MODE FilterLine_9 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput ENUM_TRADE_COMMAND InpColorBuyCommand = open_buy; // Trade command: sinput color MonitoringColorBuy = clrGold; // Buy MonitoringColor, EA only monitors this lines color sinput color CrossedColorBuy = clrGreen; // CrossedColor, EA changes crossed lines color to this value sinput bool EnableAlertsBuy = false; // EnableAlertsBuy sinput bool EnableNotificationsBuy = false; // EnableNotificationsBuy sinput bool EnableEmailsBuy = false; // EnableEmailsBuy sinput group "----------------- Sell::DOWN ---------------------------" sinput ENUM_MODE FilterLine_10 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput ENUM_TRADE_COMMAND InpColorSellCommand = open_sell; // Trade command: sinput color MonitoringColorSell = clrYellow; // Sell MonitoringColor, EA only monitors this lines color sinput color CrossedColorSell = clrGreen; // CrossedColor, EA changes crossed lines color to this value sinput bool EnableAlertsSell = false; // EnableAlertsSell sinput bool EnableNotificationsSell = false; // EnableNotificationsSell sinput bool EnableEmailsSell = false; // EnableEmailsSell sinput group "----------------- Close Buy::UP ------------------------" sinput ENUM_MODE FilterLine_11 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput ENUM_TRADE_COMMAND InpCloseBuyCommand = close_buys; // Trade command: sinput color MonitoringColorClosBuy = clrOrangeRed; // Close Buy MonitoringColor, EA only monitors this lines color sinput color CrossedColorClosBuy = clrGreen; // CrossedColor, EA changes crossed lines color to this value sinput bool EnableAlertsClosBuy = false; // EnableAlertsClosBuy sinput bool EnableNotificationsClosBuy = false; // EnableNotificationsClosBuy sinput bool EnableEmailsClosBuy = false; // EnableEmailsClosBuy sinput group "----------------- Close Sell::DOWN ---------------------" sinput ENUM_MODE FilterLine_12 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput ENUM_TRADE_COMMAND InpCloseSellCommand = close_sells; // Trade command: sinput color MonitoringColorClosSell = clrMagenta; // Close Sell MonitoringColor, EA only monitors this lines color sinput color CrossedColorClosSell = clrGreen; // CrossedColor, EA changes crossed lines color to this value sinput bool EnableAlertsClosSell = false; // EnableAlertsClosSell sinput bool EnableNotificationsClosSell= false; // EnableNotificationsClosSell sinput bool EnableEmailsClosSell = false; // EnableEmailsClosSell sinput group "----------------- Button: ------------------------------" sinput ENUM_TRADE_COMMAND InpTradeCommandBuy = open_buy; // Obj(BUY): sinput ENUM_TRADE_COMMAND InpTradeCommandSell = open_sell; // Obj(SELL): sinput ENUM_TRADE_COMMAND InpTradeCommandClosBuy = close_buys; // Obj(ClosBuy): sinput ENUM_TRADE_COMMAND InpTradeCommandClosSell = close_sells; // Obj(ClosSell): sinput group "----------------- FILTER:Command -----------------------" sinput ENUM_FILTR_COMMAND ObjFilterStopUp = Filter_Off; // Filter sinput string InpNameupper = "Линии Up"; // FILTER Upper (Horizontal Line or Trend Line) sinput ENUM_FILTR_COMMAND ObjFilterStopLow = Filter_Off; // Filter sinput string InpNamelower = "Линии Low"; // FILTER Lower (Horizontal Line or Trend Line) sinput group "----------------- :(+): Line:Middle --------------------" sinput string InpNameaverageUp = "Middle:Up"; // FILTER Up (Horizontal Line or Trend Line) sinput string InpNameaverageLow = "Middle:Low"; // FILTER Low (Horizontal Line or Trend Line) //+------------------------------------------------------------------+ ushort InpSignalsFrequency=1; // Search signals, in seconds (min value "1") uint maxLimits=1; // Кол-во Позиции Открыть в одну сторону uint SLEEPTIME=1; // Время паузы между повторами в секундах uint Deviation=10; // Отклонение цены bool ObjRevers=false; // Revers //+------------------------------------------------------------------+ bool ExtTurnOff = false; // bool ExttplAll = false; // bool ExtUpName = false; // bool ExtDownName = false; // bool ClExtUpName = false; // bool ClExtDownName = false; // bool ExtNeedCloseBuy = false; // bool ExtNeedCloseSell = false; // bool ExtNeedCloseAll = false; // bool ExtNeedOpenBuy = false; // bool ExtNeedOpenSell = false; // bool ExtAllCloseAll = false; // bool ExtCloseAll = false; // bool ExtFilter_Off = false; // bool ExtFilter_Stop = false; // bool ExtFilter_All = false; // bool ExMode_All = false; // bool ExMode_Ind = false; // string m_name[]= {"BUY","SELL","BUY_Close","SELL_Close","CLOSE_ALL","without '.tpl'"}; //+------------------------------------------------------------------+ //| MACD Sample expert class | //+------------------------------------------------------------------+ class CSampleExpert { protected:
это кому Интересно может в тестере потренироваться
Как работает функция Фильтра
сам участок в коде
//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void CSampleExpert::OnTickInpUpper(void) { if(InpSignalsFrequency>=SLEEPTIME) // search for trading signals no more than once every 1 seconds { datetime time_current=TimeCurrent(); if(time_current-ExtLastUpper>SLEEPTIME) { MqlRates rates[],rates_1[]; //ArraySetAsSeries(rates,true); int start_pos=0,count=1; if(CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count) { ExtPrevUpper=0; return; } int start_pos_1=0,count_1=1; if(CopyRates(m_symbol.Name(),Period(),start_pos_1,count_1,rates_1)!=count_1) { ExtPrevAverage=0; return; } double price_line=0.0,price_line_1=0.0; if(ObjectFind(0,InpNameaverageUp)>=0 || ObjectFind(0,InpNameupper)>=0) { long object_type_1=ObjectGetInteger(0,InpNameaverageUp,OBJPROP_TYPE); if(object_type_1==OBJ_HLINE) price_line_1=ObjectGetDouble(0,InpNameaverageUp,OBJPROP_PRICE); else if(object_type_1==OBJ_TREND) price_line_1=ObjectGetValueByTime(0,InpNameaverageUp,rates_1[0].time,0); long object_type=ObjectGetInteger(0,InpNameupper,OBJPROP_TYPE); if(object_type==OBJ_HLINE) price_line=ObjectGetDouble(0,InpNameupper,OBJPROP_PRICE); else if(object_type==OBJ_TREND) price_line=ObjectGetValueByTime(0,InpNameupper,rates[0].time,0); if(price_line>0.0 || price_line_1>0.0) { switch(ObjFilterStopUp) { case Filter_Off: ExtFilter_Off=true; break; case Filter_Stop: ExtFilter_Stop=true; if(rates[0].open>price_line) { ProcessingUp(); } break; case Filter_All: ExtFilter_All=true; if(rates[0].open<price_line && rates_1[0].close>price_line_1) { ProcessingUp(); } break; } } } ExtLastUpper=time_current; ExtLastAverage=time_current; } } } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void CSampleExpert::OnTickInpLower(void) { if(InpSignalsFrequency>=SLEEPTIME) // search for trading signals no more than once every 1 seconds { datetime time_current=TimeCurrent(); if(time_current-ExtLastLower>SLEEPTIME) { MqlRates rates[],rates_1[]; //ArraySetAsSeries(rates,true); int start_pos=0,count=1; if(CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count) { ExtPrevLower=0; return; } int start_pos_1=0,count_1=1; if(CopyRates(m_symbol.Name(),Period(),start_pos_1,count_1,rates_1)!=count_1) { ExtPrevAverage=0; return; } double price_line=0.0,price_line_1=0.0; if(ObjectFind(0,InpNameaverageLow)>=0 || ObjectFind(0,InpNamelower)>=0) { long object_type_1=ObjectGetInteger(0,InpNameaverageLow,OBJPROP_TYPE); if(object_type_1==OBJ_HLINE) price_line_1=ObjectGetDouble(0,InpNameaverageLow,OBJPROP_PRICE); else if(object_type_1==OBJ_TREND) price_line_1=ObjectGetValueByTime(0,InpNameaverageLow,rates_1[0].time,0); long object_type=ObjectGetInteger(0,InpNamelower,OBJPROP_TYPE); if(object_type==OBJ_HLINE) price_line=ObjectGetDouble(0,InpNamelower,OBJPROP_PRICE); else if(object_type==OBJ_TREND) price_line=ObjectGetValueByTime(0,InpNamelower,rates[0].time,0); if(price_line>0.0 || price_line_1>0.0) { switch(ObjFilterStopLow) { case Filter_Off: ExtFilter_Off=true; break; case Filter_Stop: ExtFilter_Stop=true; if(rates[0].open<price_line) { ProcessingDown(); } break; case Filter_All: ExtFilter_All=true; if(rates[0].open>price_line && rates_1[0].close<price_line_1) { ProcessingDown(); } break; } } } ExtLastLower=time_current; ExtLastAverage=time_current; } } } //+------------------------------------------------------------------+
А тут распределение
//+------------------------------------------------------------------+ //| main function returns true if any position processed | //+------------------------------------------------------------------+ bool CSampleExpert::Processing(void) { //--- refresh rates if(!m_symbol.RefreshRates()) return(false); ButtonOnTick(); ProfitOnTick(); ProfitTarget_2(); ProfitTarget(); ProfitTarget_1(); if(InpStartOpen) { OnTickObjTrailingOpen(); } if(InpStartClos) { OnTickObjTrailingClos(); } //--- if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) || (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom)) || (HoursFrom2<HoursTo2 && TimeLocal()>=HoursFrom2 && TimeLocal()<HoursTo2) || (HoursFrom2>HoursTo2 && (TimeLocal()<HoursTo2 || TimeLocal()>=HoursFrom2))) { MqlDateTime currTime; TimeLocal(currTime); int hour0 = currTime.hour; if((HoursFrom1 < HoursTo1 && hour0 >= HoursFrom1 && hour0 < HoursTo1) || (HoursFrom1 > HoursTo1 && (hour0 < HoursTo1 || hour0 >= HoursFrom1))) { OnTickInpUpper(); OnTickInpLower(); ProcessingFilter(); switch(ObjFilterStopUp) { case Filter_Off: ExtFilter_Off=true; ProcessingUp(); break; } switch(ObjFilterStopLow) { case Filter_Off: ExtFilter_Off=true; ProcessingDown(); break; } } } //--- exit without position processing return(false); } //+------------------------------------------------------------------+ //| main function returns true if any position processed | //+------------------------------------------------------------------+ bool CSampleExpert::ProcessingFilter(void) { //--- refresh rates if(!m_symbol.RefreshRates()) return(false); switch(FilterLine_1) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; ObjVLinetime(); break; } switch(FilterLine_2) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; ObjVLinetimeD(); break; } switch(FilterLine_3) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; Processing_1(); break; } switch(FilterLine_4) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; Processing_2(); break; } switch(FilterLine_5) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; OnTickInpNameRx(); break; } switch(FilterLine_6) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; OnTickInpNameSx(); break; } switch(FilterLine_7) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; OnTickInpNameRz(); break; } switch(FilterLine_8) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; OnTickInpNameSz(); break; } switch(FilterLine_9) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; ProcessingBuy(); break; } switch(FilterLine_10) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; ProcessingSell(); break; } switch(FilterLine_11) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; ProcessingClosBuy(); break; } switch(FilterLine_12) { case mode_All: ExMode_All=true; break; case mode_Ind: ExMode_Ind=true; ProcessingClosSell(); break; } //--- exit without position processing return(false); } //+------------------------------------------------------------------+ //| main function returns true if any position processed | //+------------------------------------------------------------------+ bool CSampleExpert::ProcessingUp(void) { //--- refresh rates if(!m_symbol.RefreshRates()) return(false); Processing_1(); ObjVLinetime(); OnTickInpNameRx(); OnTickInpNameSx(); ProcessingBuy(); ProcessingClosBuy(); //--- exit without position processing return(false); } //+------------------------------------------------------------------+ //| main function returns true if any position processed | //+------------------------------------------------------------------+ bool CSampleExpert::ProcessingDown(void) { //--- refresh rates if(!m_symbol.RefreshRates()) return(false); Processing_2(); ObjVLinetimeD(); OnTickInpNameRz(); OnTickInpNameSz(); ProcessingSell(); ProcessingClosSell(); //--- exit without position processing return(false); } //+------------------------------------------------------------------+
как его использовать в настройках
sinput group "----------------- FILTER:Command -----------------------" sinput ENUM_FILTR_COMMAND ObjFilterStopUp = Filter_Off; // Filter sinput string InpNameupper = "Линии Up"; // FILTER Upper (Horizontal Line or Trend Line) sinput ENUM_FILTR_COMMAND ObjFilterStopLow = Filter_Off; // Filter sinput string InpNamelower = "Линии Low"; // FILTER Lower (Horizontal Line or Trend Line) sinput group "----------------- :(+): Line:Middle --------------------" sinput string InpNameaverageUp = "Middle:Up"; // FILTER Up (Horizontal Line or Trend Line) sinput string InpNameaverageLow = "Middle:Low"; // FILTER Low (Horizontal Line or Trend Line) //+------------------------------------------------------------------+
Как работает функция Фильтра
сам участок в коде
А тут распределение
как его использовать в настройках
Попытаюсь объяснить функцию фильтра
P - связана с каждой по отдельности R0 отдельно с P и S0 отдельно с P
есть второй режим - где нет Middle
тогда в место R0 и S0 - пишем там и там P ----------------- получится выше жёлтой UP будут работать а ниже жёлтой DOWN будут работать
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
с такими настройками как на картинке - в синем квадрате будет работать сигнал, выше квадрата фильтр запретит сигнал, так же и с красным квадратом от жёлтой до первой красной линии сигнал будет поступать, выйдя за приделы красной линии фильтр не позволит открыть позицию
Сигналы можно получить. ОТ
1. Двух Индикаторов.
2. Двух Вертикальных линии.
3. Четырёх Горизонтальных или Трендовых линии по имени.
4. Четырёх Горизонтальных или Трендовых линии по цвету.
Итого 12 сигналов.
Запустил Эксперта на проверку работоспособности.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Предыдущий Эксперт https://www.mql5.com/ru/code/30444 почти такой же. Всё ищу для него прибыльные настройки
по графику видно как я пытаюсь подбирать ему настройки
Сигналы можно получить. ОТ
1. Двух Индикаторов.
2. Двух Вертикальных линии.
3. Четырёх Горизонтальных или Трендовых линии по имени.
4. Четырёх Горизонтальных или Трендовых линии по цвету.
Итого 12 сигналов.
Что Важно запомнить из этих сигналов - Это четыре линии где можно почти в любом алгоритме использовать.
//+------------------------------------------------------------------+ //| ENUM_TRADE_COMMAND | //+------------------------------------------------------------------+ enum ENUM_TRADE_COMMAND { Turn_Off=0, // TURN OFF tpl=1, // '.tpl' All Close_AllExt=2, // CloseAll + ExpertRemoves Close_All_All=3, // CloseAll close_tpl_b=4, // Close Sell + Open Buy + '.tpl' close_tpl_s=5, // Close Buy + Open Sell + '.tpl' close_all_tpl=6, // Close Buy's Sell's + '.tpl' UpName=7, // Line Open UpName DownName=8, // Line Open DownName UpName_s=9, // Line Open UpName + Open Sell UpName_b=10, // Line Open UpName + Open Buy DownName_b=11, // Line Open DownName + Open Buy DownName_s=12, // Line Open DownName + Open Sell ClUpName=13, // Line Close UpName ClDownName=14, // Line Close DownName ClUpName_s=15, // Line Close UpName + Open Sell ClUpName_b=16, // Line Close UpName + Open Buy ClDownName_b=17, // Line Close DownName + Open Buy ClDownName_s=18, // Line Close DownName + Open Sell close_buys=19, // Close All Buy's close_sells=20, // Close All Sell's close_all=21, // Close All Buy's and Sell's open_buy=22, // Open Buy open_sell=23, // Open Sell close_open_b=24, // Close Sell + Open Buy close_open_s=25, // Close Buy + Open Sell open_buy_sell=26, // Open Buy and Sell }; //+------------------------------------------------------------------+
находятся они в этой функции Трал.
что бы они автоматически отпрыгивали нужно задать расстояние (отмечено жёлтым)
sinput group "----------------- Trailing Line:UP ---------------------" sinput bool InpStartOpen = false; // Start Trailing Line sinput ENUM_MODE FilterLine_5 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string InpObjUpNameOpen = "openup"; // Obj: Up (Trailing Horizontal Line) sinput ENUM_TRADE_COMMAND InpTradeCommandY1 = open_sell; // Trade command: sinput color InpObjUpclrOpen = clrBlue; // Obj: command: MonitoringColor, EA only monitors this lines color sinput ENUM_MODE FilterLine_6 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string InpObjDownNameOpen = "opendown"; // Obj: Down (Trailing Horizontal Line) sinput ENUM_TRADE_COMMAND InpTradeCommandU1 = open_buy; // Trade command: sinput color InpObjDownclrOpen = clrRed; // Obj: command: MonitoringColor, EA only monitors this lines color sinput double InpObjTrailingStopOpen = 0; // Obj: Trailing Stop (distance from price to object, in pips) sinput double InpObjTrailingStepOpen = 0; // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips) sinput group "----------------- Trailing Line:DOWN -------------------" sinput bool InpStartClos = false; // Start Trailing Line sinput ENUM_MODE FilterLine_7 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string InpObjUpNameClos = "closup"; // Obj: Up (Trailing Horizontal Line) sinput ENUM_TRADE_COMMAND InpTradeCommandY2 = close_sells; // Trade command: sinput color InpObjUpclrClos = clrBlue; // Obj: command: MonitoringColor, EA only monitors this lines color sinput ENUM_MODE FilterLine_8 = mode_All; // FILTER: ВКЛ.ВЫКЛ. sinput string InpObjDownNameClos = "closdown"; // Obj: Down (Trailing Horizontal Line) sinput ENUM_TRADE_COMMAND InpTradeCommandU2 = close_buys; // Trade command: sinput color InpObjDownclrClos = clrRed; // Obj: command: MonitoringColor, EA only monitors this lines color sinput double InpObjTrailingStopClos = 0; // Obj: Trailing Stop (distance from price to object, in pips) sinput double InpObjTrailingStepClos = 0; // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)
Фриланс в помощь
Владимир Вы о чём? Все труды раздаю бесплатно. Пользуйтесь на Здоровья!
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Здесь можно скачать https://www.mql5.com/ru/code/34046


- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Для будущего моего Эксперта - хочу разложить по полочкам его внутренности, что бы можно было понимать как им пользоваться.
- я его только начал склеивать и по каждой функции попытаюсь, объяснить её предназначение.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Какие функции я хочу заложить в него!
1. Закрытие Прибыли общей.
2. Закрытие Прибыли на отдельном Графике.
3. Закрытие Прибыли по отдельности от BUY и отдельно по SELL.
4. Задать команду от Вертикальной линии.
5. Задать команду от Горизонтальной или Трендовой линии.(как от имени линии -а также от цвета линии)
6. Получение Сигнала от Индикатора и выбор команд.
7. Трал Горизонтальных линии.
8. Фильтр -который будет разделять Все функции на UP и DOWN с помощью Горизонтальной линии( Выше UP работают половина функции и DOWN другая половина)
9. Отскок Горизонтальных линии от срабатывания Сигнала на заданное расстояние.
\пока всё\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\