新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1632 1...162516261627162816291630163116321633163416351636163716381639...1953 新评论 Tretyakov Rostyslav 2021.09.29 08:58 #16311 amsgif80 #:这是我试图插入的代码。在代码的顶部抛出这个: enum ENUM_DIRECTION{DIRECTION_BUY = 0, // 只买DIRECTION_SELL = 1, // 只卖DIRECTION_ANY = 2, // 买和卖};input ENUM_DIRECTION inp_direction = DIRECTION_ANY; // 允许交易方向进一步查找代码中哪里开买、哪里卖。在start()或OnTick()函数中查看其中买入是在条件中添加: if(inp_direction!=DIRECTION_SELL)其中卖出是在条件中添加: if(inp_direction!=DIRECTION_BUY) 你把它放在哪里了? amsgif80 2021.09.29 09:02 #16312 MakarFX #: 你把它放在哪里了? //+------------------------------------------------------------------+ //| 移动平均线.mq5 | | //| Copyright 2009-2013, MetaQuotes Software Corp. //|https://www.mql5.com| //+------------------------------------------------------------------+ #property copyright "Copyright 2009-2013, MetaQuotes Software Corp. #属性链接"https://www.mql5.com" #财产版本 "1.00" enum ENUM_DIRECTION{ DIRECTION_BUY = 0, // 只买不卖 DIRECTION_SELL = 1, // 只卖出。 DIRECTION_ANY = 2, // 买和卖 }; 输入ENUM_DIRECTION inp_direction = DIRECTION_ANY; // 允许的交易方向 #include <Trade\Trade.mqh>。 Input double MaximumRisk = 0.02; // Maximum Risk in percentage 输入 double DecreaseFactor = 3; // Descrease factor 输入 int MovingPeriod = 12; // 移动平均周期 输入 int MovingShift = 6; // Moving Average shift //--- int ExtHandle=0。 //+------------------------------------------------------------------+ //|专家初始化功能| //+------------------------------------------------------------------+ int OnInit(void) { //--- ExtHandle=iMA(_Symbol,_Period,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE)。 如果(ExtHandle==INVALID_HANDLE) { printf("创建MA指标错误")。 return(INIT_FAILED)。 } //--- return(INIT_SUCCEEDED)。 } //+------------------------------------------------------------------+ //|专家勾选功能| //+------------------------------------------------------------------+ 空白的OnTick(void)。 { //--- 如果(PositionSelect(_Symbol)) CheckForClose()。 否则 CheckForOpen()。 //--- } //+------------------------------------------------------------------+ //|专家去初始化功能| //+------------------------------------------------------------------+ 空白的OnDeinit(const int reason)。 { } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //|计算最佳手数| //+------------------------------------------------------------------+ double TradeSizeOptimized(void) { 双倍价格=0.0。 double margin=0.0。 //------计算地段大小 if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,price)) return(0.0); if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,price,margin)) return(0.0); 如果(margin<=0.0) return(0.0); double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk/margin,2)。 //---计算一系列不间断的亏损交易的长度 如果(DecreaseFactor>0) { //-----------------要求整个交易历史 HistorySelect(0,TimeCurrent())。 //-- int orders=HistoryDealsTotal(); //总的交易数量 int losses=0; //系列中亏损交易的数量 for(int i=orders-1;i>=0;i--) { ulong ticket=HistoryDealGetTicket(i); 如果(ticket==0) { Print("HistoryDealGetTicket failed, no trade history"); 突破。 } //------检查交易符号 如果(HistoryDealGetString(ticket,Deal_SYMBOL)!=_Symbol) 继续。 //---- 检查利润 double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT)。 如果(利润>0.0) 突破。 如果(利润<0.0) 损失++。 } //--- 如果(损失>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1)。 } //---正常化并检查交易量的允许值 double stepvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP)。 lot=stepvol*NormalizeDouble(lot/stepvol,0)。 double minvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN)。 如果(lot<minvol) lot=minvol; double maxvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX)。 如果(lot>maxvol) lot=maxvol; //------返回交易量的值 return(lot)。 } //+------------------------------------------------------------------+ //| 检查开放位置条件 //+------------------------------------------------------------------+ 空白的CheckForOpen(void)。 { MqlRates rt[2]; //---复制价格值 如果(CopyRates(_Symbol,_Period,0,2,rt)!=2) { Print("CopyRates of " ,_Symbol," failed, no history")。 返回。 } 如果(rt[1].tick_volume>1) 返回。 double ma[1]; 如果(CopyBuffer(ExtHandle,0,0,1,ma)!=1) { Print("CopyBuffer from iMA failed, no data"); 返回。 } //----信号检查 ENUM_ORDER_TYPE信号=WRONG_VALUE。 如果(rt[0].open>ma[0] && rt[0].close<ma[0]) signal=ORDER_TYPE_SELL; // 卖出条件 if(inp_direction!=DIRECTION_BUY) 否则 { 如果(rt[0].open<ma[0] && rt[0].close>ma[0]) signal=ORDER_TYPE_BUY; // 买入条件 if(inp_direction!=DIRECTION_SELL) } //--- 额外的检查 如果(signal!=WRONG_VALUE) 如果(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) 如果(Bars(_Symbol,_Period)>100) { CTrade贸易。 trade.PositionOpen(_Symbol,signal,TradeSizeOptimized(), SymbolInfoDouble(_Symbol,signal==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK,) 0,0); } //--- } //+------------------------------------------------------------------+ //| 检查关闭位置的条件| //+------------------------------------------------------------------+ 空白的CheckForClose(void)。 { MqlRates rt[2]; //---复制价格值 如果(CopyRates(_Symbol,_Period,0,2,rt)!=2) { Print("CopyRates of " ,_Symbol," failed, no history")。 返回。 } 如果(rt[1].tick_volume>1) 返回。 double ma[1]; 如果(CopyBuffer(ExtHandle,0,0,1,ma)!=1) { Print("CopyBuffer from iMA failed, no data"); 返回。 } //------得到位置的类型,之前通过PositionSelect()选择的。 bool signal=false。 long type=PositionGetInteger(POSITION_TYPE)。 如果(type==(long)POSITION_TYPE_BUY && rt[0].open>ma[0] && rt[0].close<ma[0]) signal=true。 如果(type==(long)POSITION_TYPE_SELL && rt[0].open<ma[0] && rt[0].close>ma[0]) signal=true。 //--- 额外的检查 如果(信号) 如果(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) 如果(Bars(_Symbol,_Period)>100) { CTrade贸易。 trade.PositionClose(_Symbol,3); } //--- } Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5 www.mql5.com MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций Any questions from newcomers 请问这个为什么错误? 错误、漏洞、问题 Tretyakov Rostyslav 2021.09.29 09:10 #16313 这一部分应该是这样的 //--- проверка сигналов ENUM_ORDER_TYPE signal=WRONG_VALUE; if(rt[0].open>ma[0] && rt[0].close<ma[0]) { if(inp_direction!=DIRECTION_BUY) signal=ORDER_TYPE_SELL; } else { if(rt[0].open<ma[0] && rt[0].close>ma[0]) { if(inp_direction!=DIRECTION_SELL) signal=ORDER_TYPE_BUY; } } //--- дополнительные проверки Alexey Viktorov 2021.09.29 09:18 #16314 MakarFX #: 这一部分应该是这样的。 马卡,这个人。 if(inp_direction==DIRECTION_SELL||inp_direction==DIRECTION_ANY) 最好用这个来代替。 if(inp_direction!=DIRECTION_BUY) Tretyakov Rostyslav 2021.09.29 09:34 #16315 Alexey Viktorov #:马卡,这个人 最好用这个来代替。 取代)。 amsgif80 2021.09.29 09:47 #16316 MakarFX #: 这一部分应该是这样的 我从心底里感谢你!这一切一下子就起作用了,它在起作用。而且我已经绞尽脑汁研究如何做到这一点))。 amsgif80 2021.09.29 11:31 #16317 我可以再问你同样的问题吗,但是关于我自己的简单编辑器生成的专家顾问?我想,现在我将设法自己做,但我不知道把这个买/卖代码放在哪里。我不知道在哪里粘贴这个买/卖代码。 Tretyakov Rostyslav 2021.09.29 11:40 #16318 amsgif80 #: 我可以再问你同样的问题吗,但是关于我自己的简单编辑器生成的EA?我想,现在我将设法自己做,但我不知道把这个买/卖代码放在哪里。我不知道在哪里粘贴这个买入/卖出代码。 给我看 Tretyakov Rostyslav 2021.09.29 11:44 #16319 amsgif80 #: 我已经向你展示了如何在论坛中插入该代码 EVGENII SHELIPOV 2021.09.29 11:47 #16320 MakarFX #:你没有改变任何东西。你的呼吁是在里面。 Makar 谢谢你的提示 1...162516261627162816291630163116321633163416351636163716381639...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这是我试图插入的代码。
在代码的顶部抛出这个:
enum ENUM_DIRECTION{
DIRECTION_BUY = 0, // 只买
DIRECTION_SELL = 1, // 只卖
DIRECTION_ANY = 2, // 买和卖
};
input ENUM_DIRECTION inp_direction = DIRECTION_ANY; // 允许交易方向
进一步查找代码中哪里开买、哪里卖。在start()或OnTick()函数中查看
其中买入是在条件中添加:
if(inp_direction!=DIRECTION_SELL)
其中卖出是在条件中添加:
if(inp_direction!=DIRECTION_BUY)
你把它放在哪里了?
这一部分应该是这样的
这一部分应该是这样的。
马卡,这个人。
if(inp_direction==DIRECTION_SELL||inp_direction==DIRECTION_ANY)
最好用这个来代替。
if(inp_direction!=DIRECTION_BUY)
马卡,这个人
最好用这个来代替。
这一部分应该是这样的
我从心底里感谢你!这一切一下子就起作用了,它在起作用。而且我已经绞尽脑汁研究如何做到这一点))。
我可以再问你同样的问题吗,但是关于我自己的简单编辑器生成的EA?我想,现在我将设法自己做,但我不知道把这个买/卖代码放在哪里。我不知道在哪里粘贴这个买入/卖出代码。
我已经向你展示了如何在论坛中插入该代码
你没有改变任何东西。
你的呼吁
是在里面。
Makar 谢谢你的提示