编写免费的EA - 页 11 1...45678910111213141516 新评论 gss 2021.05.20 15:29 #101 4p0ssum: 谢谢你亲爱的gss对我的请求感兴趣。如果你是一个MQL4程序员,你可以与其他MQL4程序员交换你的EA。我认为我的代码是好的,我从不同的EA中收集了它,或者更准确地说,从其中一个EA中,我只取了追踪止损功能。其余的是我自己编造的(关于待定订单)。我想请您和其他大师看看我的代码,如果您不介意的话,请为这个机器人再添加两个功能。 1)当两者之一被触发时,删除一个待定订单。 2)自动增加一手(每50美元0.01,即100美元将是0.02)。 预先感谢你。 //+------------------------------------------------------------------+ //| 4p0ssum.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #property strict extern int TakeProfit = 100.0; extern bool AllPositions = True; // Управлять всеми позициями extern bool ProfitTrailing = True; // Тралить только профит extern int TrailingStop = 50; // Фиксированный размер трала extern int TrailingStep = 0; // Шаг трала extern bool Del = false; // Удалять оппозитный ордер extern bool UseSound = False; // Использовать звуковой сигнал extern string NameFileSound = "expert.wav"; // Наименование звукового файла //------- Внешние параметры модуля ----------------------------------- extern string _Parameters_b_Lots = "---------- Параметры модуля расчёта лота"; extern int LotsWayChoice = 0; // Способ выбора рабочего лота: // 0-фиксированный, // 1-процент от депозита, // 2-фиксированно-пропорциональный, // 3-фракционно-фиксированный, extern double Lots = 0.1; // Фиксированный размер лота extern int LotsPercent = 10; // Процент от депозита extern int LotsDeltaDepo = 500; // Коэффициент приращения депозита extern int LotsDepoForOne = 500; // Размер депозита для одного минилота extern int LotsMax = 1000; // Максимальное количество минилотов //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void start() { double TakeProfitLevelB; double TakeProfitLevelS; double BuyStart = Ask + 400*_Point; double SellStart = Bid - 400*_Point; TakeProfitLevelB = BuyStart + TakeProfit*Point; TakeProfitLevelS = SellStart - TakeProfit*Point; if (Open[1]==Close[1]&& OrdersTotal()==0) { int BuyTicket = OrderSend(Symbol(),OP_BUYSTOP,GetSizeLot(),BuyStart,3,0,TakeProfitLevelB,NULL,0,0,Green); int SellTicket = OrderSend(Symbol(),OP_SELLSTOP,GetSizeLot(),SellStart,3,0,TakeProfitLevelS,NULL,0,0,Blue); } for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (AllPositions || OrderSymbol()==Symbol()) { TrailingPositions(); } } } if(Del && ExistPositions(Symbol()))DeleteOrders(Symbol(),-1); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void TrailingPositions() { double pBid, pAsk, pp; pp = MarketInfo(OrderSymbol(), MODE_POINT); if (OrderType()==OP_BUY) { pBid = MarketInfo(OrderSymbol(), MODE_BID); if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) { if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) { ModifyStopLoss(pBid-TrailingStop*pp); return; } } } if (OrderType()==OP_SELL) { pAsk = MarketInfo(OrderSymbol(), MODE_ASK); if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) { if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) { ModifyStopLoss(pAsk+TrailingStop*pp); return; } } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void ModifyStopLoss(double ldStopLoss) { bool fm; fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE); if (fm && UseSound) PlaySound(NameFileSound); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 06.03.2008 | //| Описание : Возвращает флаг существования позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //| ot - время открытия ( 0 - любое время открытия) | //+----------------------------------------------------------------------------+ bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) { int i, k=OrdersTotal(); if (sy=="" || sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (ot<=OrderOpenTime()) return(True); } } } } } } return(False); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 13.06.2007 | //| Описание : Удаление ордеров. Версия функции для тестов на истории. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| op - операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ void DeleteOrders(string sy="", int op=-1, int mn=-1) { int i, k=OrdersTotal(), ot; if (sy=="" || sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { ot=OrderType(); if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) { if (OrderSymbol()==sy && (op<0 || ot==op)) { if (mn<0 || OrderMagicNumber()==mn) { OrderDelete(OrderTicket(), clrRed); } } } } } } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 01.02.2008 | //| Описание : Возвращает одно из двух значений взависимости от условия. | //+----------------------------------------------------------------------------+ string IIFs(bool condition, string ifTrue, string ifFalse) { if (condition) return(ifTrue); else return(ifFalse); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 01.09.2005 | //| Описание : Вывод сообщения в коммент и в журнал | //+----------------------------------------------------------------------------+ //| Параметры: | //| m - текст сообщения | //+----------------------------------------------------------------------------+ void Message(string m) { Comment(m); if (StringLen(m)>0) Print(m); } //+------------------------------------------------------------------+ //| Главная функция получения размера лота (вызывается из советника) | //+------------------------------------------------------------------+ double GetSizeLot() { double dLot; if (LotsWayChoice==0) dLot=Lots; // фиксированный процент от депозита if (LotsWayChoice==1) { dLot=MathCeil(AccountFreeMargin()/100000*LotsPercent)/10; } // фиксированно-пропорциональный if (LotsWayChoice==2) { int k=LotsDepoForOne; for (double i=2; i<=LotsMax; i++) { k=k+i*LotsDeltaDepo; if (k>AccountFreeMargin()) { dLot=(i-1)/10000; break; } } } // фракционно-фиксированный if (LotsWayChoice==3) { dLot=MathCeil((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/10; } if (dLot<MarketInfo(Symbol(), MODE_MINLOT)) dLot=MarketInfo(Symbol(), MODE_MINLOT); if (dLot<0.01) dLot=0.01; return(dLot); } //+------------------------------------------------------------------+ ilfatiskhakov 2021.05.26 16:33 #102 你好,我想知道你是否可以帮我写一个EA。事情是这样的。在一根蜡烛以大成交量(买入或卖出)收盘后,在第二根蜡烛上开出一个可定制手数和TP的买入或卖出订单。谢谢你。如果你能提供帮助))MT4终端 Andrei 2021.05.26 21:32 #103 ilfatiskhakov: 你好,我想知道你是否可以帮助我写一份EA。事情是这样的。在一根蜡烛以大成交量(买入或卖出)收盘后,在第二根蜡烛上开出一个可定制手数和TP的买入或卖出订单。谢谢你。如果你能提供帮助))MT4终端 https://www.mql5.com/ru/code/mt4/experts MQL5 Code Base: Советники www.mql5.com Советники для MetaTrader 4 с исходными кодами SAJSRAh 2021.06.01 07:26 #104 你好,我想请你为附件中的ADX指标写一个EA。我要求你为这个指标写一个EA,而不是为另一个指标写,因为有很多品种。 操作原理从箭头到箭头,当箭头出现时,交易被打开,当相反的信号出现时,交易被关闭,并以相反的方向打开。手数的计算公式为(余额x(风险/1000),其中风险从0到1。 还应该有一个固定的手数函数 附加的文件: adx-buy-sell.mq4 4 kb Iurii Tokman 2021.06.01 09:18 #105 SAJSRAh:你好,我想请你为附件中的ADX指标写一个EA。我要求你为这个指标写一个EA,而不是为另一个指标写,因为有很多品种。操作原理从箭头到箭头,当箭头出现时,交易被打开,当相反的信号出现时,交易被关闭,并以相反的方向打开。手数的计算公式是(平衡x(风险/1000),其中风险是从0到1。 还应该有一个恒定手数的函数 虚假的信号 + 未来的指标 SAJSRAh 2021.06.01 09:49 #106 Iurii Tokman:固体虚假信号+ 未来的指标 我在H4上手动交易,效果还不错 [删除] 2021.06.01 10:20 #107 Iurii Tokman: 固体虚假信号 + 未来的指标 在MT5中略有不同的进入点 //+------------------------------------------------------------------+ //| Back and forth ADX.mq5 | //| Copyright © 2005, BrainTrading Inc | //| http://www.braintrading.com | //+------------------------------------------------------------------+ //---- авторство индикатора #property copyright "Copyright © 2005, BrainTrading Inc." //---- ссылка на сайт автора #property link "http://www.braintrading.com/" //---- номер версии индикатора #property version "1.00" //---- отрисовка индикатора в главном окне #property indicator_chart_window //---- для расчета и отрисовки индикатора использовано два буфера #property indicator_buffers 2 //---- использовано всего два графических построения #property indicator_plots 2 //+----------------------------------------------+ //| Параметры отрисовки медвежьего индикатора | //+----------------------------------------------+ //---- отрисовка индикатора 1 в виде символа #property indicator_type1 DRAW_ARROW //---- в качестве цвета медвежьей линии индикатора использован розовый цвет #property indicator_color1 Wheat //---- толщина линии индикатора 1 равна 4 #property indicator_width1 2 //---- отображение метки медвежьей линии индикатора #property indicator_label1 "Back and forth ADX Sell" //+----------------------------------------------+ //| Параметры отрисовки бычьго индикатора | //+----------------------------------------------+ //---- отрисовка индикатора 2 в виде символа #property indicator_type2 DRAW_ARROW //---- в качестве цвета бычей линии индикатора использован зеленый цвет #property indicator_color2 LightSeaGreen //---- толщина линии индикатора 2 равна 4 #property indicator_width2 2 //---- отображение метки бычьей линии индикатора #property indicator_label2 "Back and forth ADX Buy" //+----------------------------------------------+ //| Входные параметры индикатора | //+----------------------------------------------+ input int adx_period=14; // период расчета ADX //---- объявление динамических массивов, которые будут в //---- дальнейшем использованы в качестве индикаторных буферов double SellBuffer[]; double BuyBuffer[]; //--- индикаторные буферы double ADXBuffer[]; double DI_plusBuffer[]; double DI_minusBuffer[]; //--- int OldTrend; int ADX_Handle; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- получение хендла индикатора ADX ADX_Handle=iADX(Symbol(),Period(),adx_period); if(ADX_Handle==INVALID_HANDLE) Print(" Не удалось получить хендл индикатора iADX"); //---- превращение динамического массива в индикаторный буфер SetIndexBuffer(0,SellBuffer,INDICATOR_DATA); //---- осуществление сдвига начала отсчета отрисовки индикатора 1 PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,0); //--- создание метки для отображения в DataWindow PlotIndexSetString(0,PLOT_LABEL,"Back and forth ADX Sell"); //---- символ для индикатора PlotIndexSetInteger(0,PLOT_ARROW,108); //---- индексация элементов в буфере как в таймсерии ArraySetAsSeries(SellBuffer,true); //---- превращение динамического массива в индикаторный буфер SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA); //---- осуществление сдвига начала отсчета отрисовки индикатора 2 PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,0); //--- создание метки для отображения в DataWindow PlotIndexSetString(1,PLOT_LABEL,"Back and forth ADX Buy"); //---- символ для индикатора PlotIndexSetInteger(1,PLOT_ARROW,108); //---- индексация элементов в буфере как в таймсерии ArraySetAsSeries(BuyBuffer,true); //--- привязка массивов к индикаторным буферам SetIndexBuffer(2,ADXBuffer,INDICATOR_DATA); SetIndexBuffer(3,DI_plusBuffer,INDICATOR_DATA); SetIndexBuffer(4,DI_minusBuffer,INDICATOR_DATA); //---- установка формата точности отображения индикатора IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //---- имя для окон данных и лэйба для субъокон string short_name="Back and forth ADX"; IndicatorSetString(INDICATOR_SHORTNAME,short_name); //---- } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //---- проверка количества баров на достаточность для расчета if(BarsCalculated(ADX_Handle)<rates_total || rates_total<0) return(0); //---- объявления локальных переменных int to_copy,limit,bar; bool ADXUp,ADXDn; //---- расчеты необходимого количества копируемых данных и //стартового номера limit для цикла пересчета баров if(prev_calculated>rates_total || prev_calculated<=0)// проверка на первый старт расчета индикатора { to_copy=rates_total; // расчетное количество всех баров limit=rates_total-1; // стартовый номер для расчета всех баров } else { to_copy=rates_total-prev_calculated+1; // расчетное количество только новых баров limit=rates_total-prev_calculated; // стартовый номер для расчета новых баров } //---- копируем вновь появившиеся данные в массивы if(CopyBuffer(ADX_Handle,0,0,to_copy,ADXBuffer)<=0) return(0); if(CopyBuffer(ADX_Handle,1,0,to_copy,DI_plusBuffer)<=0) return(0); if(CopyBuffer(ADX_Handle,2,0,to_copy,DI_minusBuffer)<=0) return(0); //---- индексация элементов в массивах как в таймсериях ArraySetAsSeries(ADXBuffer,true); ArraySetAsSeries(DI_plusBuffer,true); ArraySetAsSeries(DI_minusBuffer,true); ArraySetAsSeries(open,true); ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); ArraySetAsSeries(close,true); //---- основной цикл расчета индикатора for(bar=limit; bar>=0; bar--) { SellBuffer[bar]=0.0; BuyBuffer[bar]=0.0; ADXDn=DI_plusBuffer[bar]<DI_minusBuffer[bar] && ADXBuffer[bar]<DI_minusBuffer[bar]; ADXUp=DI_plusBuffer[bar]>DI_minusBuffer[bar] && ADXBuffer[bar]>DI_minusBuffer[bar]; //---- if(ADXDn) { if(OldTrend>0) SellBuffer[bar]=high[bar]; if(bar!=0) OldTrend=-1; } if(ADXUp) { if(OldTrend<0) BuyBuffer[bar]=low[bar]; if(bar!=0) OldTrend=+1; } } //---- return(rates_total); } //+------------------------------------------------------------------+ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\跑去检查指标--似乎是一个好的开始 Iurii Tokman 2021.06.01 10:38 #108 SAJSRAh:我在H4上手动交易,看起来不错。 工作室的交易结果 Iurii Tokman 2021.06.01 10:44 #109 SanAlex:MT5的进场点略有不同 未来在哪里? for(int i = 0; i < limit; i++) { b4plusdi = iADX(NULL, 0, ADXcrossesPeriod, PRICE_CLOSE, MODE_PLUSDI, i - 1); i - 1 [删除] 2021.06.01 10:49 #110 Iurii Tokman:未来在哪里? 我不知道--是我自己做的!我是自学成才的,都是用科学的方法。 \\\\\\\\\\\\\ 我自己也很惊讶--这似乎也是一个好的结果--我的专家很重--需要很长时间来测试 1...45678910111213141516 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
谢谢你亲爱的gss对我的请求感兴趣。如果你是一个MQL4程序员,你可以与其他MQL4程序员交换你的EA。我认为我的代码是好的,我从不同的EA中收集了它,或者更准确地说,从其中一个EA中,我只取了追踪止损功能。其余的是我自己编造的(关于待定订单)。我想请您和其他大师看看我的代码,如果您不介意的话,请为这个机器人再添加两个功能。
你好,我想知道你是否可以帮助我写一份EA。事情是这样的。在一根蜡烛以大成交量(买入或卖出)收盘后,在第二根蜡烛上开出一个可定制手数和TP的买入或卖出订单。谢谢你。如果你能提供帮助))MT4终端
https://www.mql5.com/ru/code/mt4/experts
你好,我想请你为附件中的ADX指标写一个EA。我要求你为这个指标写一个EA,而不是为另一个指标写,因为有很多品种。
操作原理从箭头到箭头,当箭头出现时,交易被打开,当相反的信号出现时,交易被关闭,并以相反的方向打开。手数的计算公式为(余额x(风险/1000),其中风险从0到1。 还应该有一个固定的手数函数
你好,我想请你为附件中的ADX指标写一个EA。我要求你为这个指标写一个EA,而不是为另一个指标写,因为有很多品种。
操作原理从箭头到箭头,当箭头出现时,交易被打开,当相反的信号出现时,交易被关闭,并以相反的方向打开。手数的计算公式是(平衡x(风险/1000),其中风险是从0到1。 还应该有一个恒定手数的函数
虚假的信号
+ 未来的指标
固体虚假信号
+ 未来的指标
我在H4上手动交易,效果还不错
Iurii Tokman:
固体虚假信号
+ 未来的指标
在MT5中略有不同的进入点
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
跑去检查指标--似乎是一个好的开始
我在H4上手动交易,看起来不错。
工作室的交易结果
MT5的进场点略有不同
未来在哪里?
i - 1
未来在哪里?
我不知道--是我自己做的!我是自学成才的,都是用科学的方法。
\\\\\\\\\\\\\ 我自己也很惊讶--这似乎也是一个好的结果--我的专家很重--需要很长时间来测试