终于出新版本了。
不知道这个版本具体解决了什么问题。
Where is the download address for MetaTrader 4? 2 days to find
download MT4 from the broker website (any broker who is supporting MT4).
从经纪人网站(支持MT4的任何经纪人)下载MT4。
Where to download
from the broker's website.
从任何经纪人的网站(支持MT4的经纪人;很多经纪人都具有MT4和网站)。
到底还是需要不断更新
本人钻学MT4后又钻学MT5 现基本都可以把自己的思路写成工具 无论指标还是EA 总结得出:
1、MT4属于稳定的版本, MT5貌似有点好高骛远.....;
2、同样的东西,在MT4毫无错误的得以显示,而到了MT5感觉简单的东西搞复杂了,字符增加近一倍,方可无措编译,可实际显示却依然不尽人意......;
3、MT5中,初始化里面一旦引入有多数组多元素多重计算的较为复杂的函数后,初始化基本就是100%不成功,若将此函数直接放入OnCalculate里面更是不予计算。因此自定工具非得通过切换一下周期方可计算显示;
4、尤其是引入较多自定指标后,MT4对于同品种同时打开多周期的多个图表时,各自显示一切正常,而到了MT5会莫名的有相互"打架"的现象;
5、MT5中,貌似OnInit()和OnDeinit(const int reason)会相互矛盾,刚刚初始化的东西偶尔会被OnDeinit干掉;
6、尤其是简单的外汇现货交易,MT4已经十分完美,对于MT5个人愚见属于有画蛇添足的方面,对于自定指标和EA来说,同样的东西,MT5相对于MT4,反而会耗用翻倍的内存,当然也许是本人学艺不精,导致错误胡说了!
最后建议:永久保留MT4。或者将MT5分为AB两版 ,一版就沿用原来的MT4足以应对外汇现货交易。一版着重于股票等复杂性交易。否则,融合在一起 反而导致MT5远没有MT4流畅了。
比如:对于止损或拟锁 ,提前预估最大回撤,需要估算最大亏损额度时:
//-------------------------------------------------------------------------------------
于MT4:
double Gua_Kui(string pm) { int cnt,i, b=0,s=0; double BOpen[50]={0}, SOpen[50]={0}, Kui=0, kuiB=0, kuiS=0, YDE=MarketInfo(pm,MODE_TICKVALUE), Poi=MarketInfo(pm,MODE_POINT); string Bcom[50]={""}, Scom[50]={""}; for(cnt=OrdersTotal()-1;cnt>=0;cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==false) break; { if(OrderSymbol()==pm) { if(OrderStopLoss()!=0) { if(OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT ) kuiB=kuiB+(OrderOpenPrice()-OrderStopLoss())/Poi*OrderLots()*YDE; if(OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT) kuiS=kuiS+(OrderStopLoss()-OrderOpenPrice())/Poi*OrderLots()*YDE; } if(OrderType()==OP_SELLSTOP) { Bcom[b]=OrderComment(); BOpen[b]=OrderOpenPrice(); b++; } if(OrderType()==OP_BUYSTOP) { Scom[s]=OrderComment(); SOpen[s]=OrderOpenPrice(); s++; } } } } for(i=0;i<b;i++) { for(cnt=OrdersTotal()-1;cnt>=0;cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==false) break; if(OrderSymbol()==pm && OrderStopLoss()==0 && OrderTicket()==StringToInteger(Bcom[i])) { if(OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT) kuiB=kuiB+(OrderOpenPrice()-BOpen[i])/Poi*OrderLots()*YDE; } } } for(i=0;i<s;i++) { for(cnt=OrdersTotal()-1;cnt>=0;cnt--) { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==false) break; if(OrderSymbol()==pm && OrderStopLoss()==0 && OrderTicket()==StringToInteger(Scom[i])) { if(OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT) kuiS=kuiS+(SOpen[i]-OrderOpenPrice())/Poi*OrderLots()*YDE; } } } Kui=kuiB+kuiS; return(Kui); } //-------------------------------------------------------------------------------------
于MT5:
double Gua_Kui(string pm) { int cnt,i, b=0,s=0; double BOpen[50]={0}, SOpen[50]={0}, Kui=0, kuiB=0, kuiS=0; double YDE=SymbolInfoDouble(pm,SYMBOL_TRADE_TICK_VALUE), Poi=SymbolInfoDouble(pm,SYMBOL_POINT); string Bcom[50]={""}, Scom[50]={""}; for(cnt=PositionsTotal()-1;cnt>=0;cnt--) { if(PositionGetSymbol(cnt)==pm && PositionGetDouble(POSITION_SL)!=0) { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) kuiB=kuiB+(PositionGetDouble(POSITION_PRICE_OPEN)-PositionGetDouble(POSITION_SL))/Poi*PositionGetDouble(POSITION_VOLUME)*YDE; if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) kuiS=kuiS+(PositionGetDouble(POSITION_SL)-PositionGetDouble(POSITION_PRICE_OPEN))/Poi*PositionGetDouble(POSITION_VOLUME)*YDE; } } for(cnt=OrdersTotal()-1;cnt>=0;cnt--) { if(OrderGetTicket(cnt)>0) { if(OrderGetString(ORDER_SYMBOL)==pm) { if(OrderGetDouble(ORDER_SL)!=0) { if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_LIMIT) kuiB=kuiB+(OrderGetDouble(ORDER_PRICE_OPEN)-OrderGetDouble(ORDER_SL))/Poi*OrderGetDouble(ORDER_VOLUME_INITIAL)*YDE; if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_LIMIT) kuiS=kuiS+(OrderGetDouble(ORDER_SL)-OrderGetDouble(ORDER_PRICE_OPEN))/Poi*OrderGetDouble(ORDER_VOLUME_INITIAL)*YDE; } if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_STOP) { Bcom[b]=OrderGetString(ORDER_COMMENT); BOpen[b]=OrderGetDouble(ORDER_PRICE_OPEN); b++; } if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP) { Scom[s]=OrderGetString(ORDER_COMMENT); SOpen[s]=OrderGetDouble(ORDER_PRICE_OPEN); s++; } } } } for(i=0;i<b;i++) { for(cnt=PositionsTotal()-1;cnt>=0;cnt--) { if(PositionGetSymbol(cnt)==pm && PositionGetDouble(POSITION_SL)==0 && PositionGetInteger(POSITION_TICKET)==StringToInteger(Bcom[i])) { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) kuiB=kuiB+(PositionGetDouble(POSITION_PRICE_OPEN)-BOpen[i])/Poi*PositionGetDouble(POSITION_VOLUME)*YDE; } } for(cnt=OrdersTotal()-1;cnt>=0;cnt--) { if(OrderGetTicket(cnt)>0) { if(OrderGetString(ORDER_SYMBOL)==pm && OrderGetDouble(ORDER_SL)==0 && OrderGetInteger(ORDER_TICKET)==StringToInteger(Bcom[i])) { if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_LIMIT) kuiB=kuiB+(OrderGetDouble(ORDER_PRICE_OPEN)-BOpen[i])/Poi*OrderGetDouble(ORDER_VOLUME_INITIAL)*YDE; } } } } for(i=0;i<s;i++) { for(cnt=PositionsTotal()-1;cnt>=0;cnt--) { if(PositionGetSymbol(cnt)==pm && PositionGetDouble(POSITION_SL)==0 && PositionGetInteger(POSITION_TICKET)==StringToInteger(Scom[i])) { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) kuiS=kuiS+(SOpen[i]-PositionGetDouble(POSITION_PRICE_OPEN))/Poi*PositionGetDouble(POSITION_VOLUME)*YDE; } } for(cnt=OrdersTotal()-1;cnt>=0;cnt--) { if(OrderGetTicket(cnt)>0) { if(OrderGetString(ORDER_SYMBOL)==pm && OrderGetDouble(ORDER_SL)==0 && OrderGetInteger(ORDER_TICKET)==StringToInteger(Scom[i])) { if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_LIMIT) kuiS=kuiS+(SOpen[i]-OrderGetDouble(ORDER_PRICE_OPEN))/Poi*OrderGetDouble(ORDER_VOLUME_INITIAL)*YDE; } } } } Kui=kuiB+kuiS; return(Kui); } //-------------------------------------------------------------------------------------
以上仅属个人愚见,不对之处,敬请谅解,且望予以指正,十分感谢!
xiaoqiang Wang:
到底还是需要不断更新
本人钻学MT4后又钻学MT5 现基本都可以把自己的思路写成工具 无论指标还是EA 总结得出:
1、MT4属于稳定的版本, MT5貌似有点好高骛远.....;
2、同样的东西,在MT4毫无错误的得以显示,而到了MT5感觉简单的东西搞复杂了,字符增加近一倍,方可无措编译,可实际显示却依然不尽人意......;
3、MT5中,初始化里面一旦引入有多数组多元素多重计算的较为复杂的函数后,初始化基本就是100%不成功,若将此函数直接放入OnCalculate里面更是不予计算。因此自定工具非得通过切换一下周期方可计算显示;
4、尤其是引入较多自定指标后,MT4对于同品种同时打开多周期的多个图表时,各自显示一切正常,而到了MT5会莫名的有相互"打架"的现象;
5、MT5中,貌似OnInit()和OnDeinit(const int reason)会相互矛盾,刚刚初始化的东西偶尔会被OnDeinit干掉;
6、尤其是简单的外汇现货交易,MT4已经十分完美,对于MT5个人愚见属于有画蛇添足的方面,对于自定指标和EA来说,同样的东西,MT5相对于MT4,反而会耗用翻倍的内存,当然也许是本人学艺不精,导致错误胡说了!
最后建议:永久保留MT4。或者将MT5分为AB两版 ,一版就沿用原来的MT4足以应对外汇现货交易。一版着重于股票等复杂性交易。否则,融合在一起 反而导致MT5远没有MT4流畅了。
您说的对,引入复杂运算MT5确实跟你描述的一样,
初始化烂、得不断切换周期、有时候甚至连切换周期都显示不出来,我也被这样的毛病纠结了好几年。
因此MT5一直都是拿来玩玩。
16G内存 i7主板的电脑 就打开MT4 MT5总共三个客户端 别的程序都没开
今晚这行情 MT5多个单情况下的EA 在设置损盈平仓等方面跟手动一样慢
MT4一样的多个单流畅得很 点到眨眼完成各个操作
总结 MT5太...
到底还是需要不断更新
本人钻学MT4后又钻学MT5 现基本都可以把自己的思路写成工具 无论指标还是EA 总结得出:
1、MT4属于稳定的版本, MT5貌似有点好高骛远.....;
2、同样的东西,在MT4毫无错误的得以显示,而到了MT5感觉简单的东西搞复杂了,字符增加近一倍,方可无措编译,可实际显示却依然不尽人意......;
3、MT5中,初始化里面一旦引入有多数组多元素多重计算的较为复杂的函数后,初始化基本就是100%不成功,若将此函数直接放入OnCalculate里面更是不予计算。因此自定工具非得通过切换一下周期方可计算显示;
4、尤其是引入较多自定指标后,MT4对于同品种同时打开多周期的多个图表时,各自显示一切正常,而到了MT5会莫名的有相互"打架"的现象;
5、MT5中,貌似OnInit()和OnDeinit(const int reason)会相互矛盾,刚刚初始化的东西偶尔会被OnDeinit干掉;
6、尤其是简单的外汇现货交易,MT4已经十分完美,对于MT5个人愚见属于有画蛇添足的方面,对于自定指标和EA来说,同样的东西,MT5相对于MT4,反而会耗用翻倍的内存,当然也许是本人学艺不精,导致错误胡说了!
最后建议:永久保留MT4。或者将MT5分为AB两版 ,一版就沿用原来的MT4足以应对外汇现货交易。一版着重于股票等复杂性交易。否则,融合在一起 反而导致MT5远没有MT4流畅了。
比如:对于止损或拟锁 ,提前预估最大回撤,需要估算最大亏损额度时:
//-------------------------------------------------------------------------------------
于MT4:
于MT5:
以上仅属个人愚见,不对之处,敬请谅解,且望予以指正,十分感谢!
MetaTrader 4更新将于2020年1月24日,星期五,进行发布。此次更新提供了错误修复和性能改进。
新版本将通过实时更新系统获得。