漆天编程◎
yunkaicn
精通在MT4平台上使用MQL4语言编写EA
关注数: 39
粉丝数: 146
发帖数: 139
关注贴吧数: 35
你知道EA定制到底有多赚钱吗? 你相信有人做EA代写,一个月赚9万以上吗? 你相信有人做EA定制,两年花掉了80万吗? 这都是真的。 任何事情做到极致,都能出现难以想象的结果。
【漆学军】分享我自用多年的马丁策略EA完整源码及参数(winkey) 马丁策略一直都是具有很大争议的,因为有太多的人使用这个策略爆仓了,但是依然有人使用这个赚钱了。那些使用这个策略爆仓了的人会认为马丁策略不行,是垃圾,我是不同意这种说法的。 比如说过马路有人被车撞死了,你是要取消马路,还是要取消汽车呢?吃饭有人被噎死了,那就不要在吃饭了吗? 正因为上面问题的答案都是不能,所以我们也不能说马丁策略是垃圾策略。 天下大势,分久必合,合久必分。外汇行情,涨久必跌,跌久必涨。 万事万物无不遵从这种因果循环的规律。 就像正弦曲线图一样,上下上下周而复始,循环往复。而马丁策略正是适合这种波动形状的震荡行情。如果行情只上涨不下跌,或者只下跌不上涨,那么使用马丁策略是不适合的。 为什么大多数人使用马丁策略会亏损?是因为太贪婪了。 打个比方,EURUSD,一波行情波动个100点不回头是很常见的,但是有些人10000美金账户,0.1手起步,每隔10个点就加仓,而且加仓手数是直接翻倍为0.2手,0.4手,0.8手,1.6手。。。,这么做,盈利起来自然是很快,但是账户很可能抗不过100点就会显示资金不够用,无法下更多的单子,最终导致账户很快爆仓。 如果能够想到办法降低预期盈利,那么也就大大降低了风险。 有两种方法可做到:加大加仓间隔,每隔60点到600点加仓。 减少加仓手数倍数,交易手数不要每次直接2倍往上翻,可以设定每次的手数是前一次单子手数的1.5倍即可。 使用了低风险的马丁策略之后,盈利的时间就变得越来越长了,虽然盈利并不多,但是在长时间积累之后,实际的盈利率其实并不低。这款EA是我在2011年开发的,命名为Winkey,意为盈利的密码,今天稍加了修改,只是为了适应当前的MT4平台。当年测试这个EA的时候,我用了一个500美金的真实账户,半年账户做到了1800美金,当时用的参数加仓间隔是60点,加仓手数倍数是1.2倍。这就是我使用马丁策略盈利的经验,分享给大家。 EA程序完整源码如下,可复制粘贴过去使用,但是请注意参数做成了数组,需要在数组里面直接修改加仓间隔和加仓手数倍数:(截图为部分代码,截图下面是全部完整的winkey代码,200行左右。)全部源码如下: //+------------------------------------------------------------------+ //| Winkey.mq4 | //| Copyright @2021,
[email protected]
| //| http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.study-ea.com&urlrefer=01edf4f1e2a9e3278ecb119c87efac48 | //+------------------------------------------------------------------+ //去掉了全局变量设置。 //去掉了加仓方案设置,加仓方案按照数组里面设置。 //增加了停止开新仓的设置,意思是当前一波结束了不再下单。 //ea运行途中可随时设置参数,不会影响运行效果。 //------------------------------------------------------------------- #property copyright "Copyright @2011,
[email protected]
" #property link "http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.study-ea.com&urlrefer=01edf4f1e2a9e3278ecb119c87efac48" #property version "1.00" #property description "间隔:0, 20,20,15,15,20,20,30。" #property description "倍率:1, 2, 1, 2, 1, 3, 2, 4。" #property description "最大交易量5手,大于5手不开仓。" #property strict //------------------------------------------------------------------- input int Magic=1800; //魔术码 input bool IsStop=false; //当前一波结束是否停止 input double lots=0.01; //初始手数 //-加仓时的间隔点数,数组从0开始 int Interval_Pips[20]= {0, 20,20,15,15,20,20,30}; //-加仓时的交易量倍数 int Interval_Lots[20]= {1, 2, 1, 2, 1, 3, 2, 4}; int slippage=3; input int TP=300; //止盈点数 input int SL=2000;//止损点数 //止损点数为第一单的止损点数计算出来的价格作为每一单的止损价。加仓的时候会考虑下单价格距离止损价太近就不加仓。 string comt="WinKey->"; int i,db=1; int Digitslots; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //---- double minlot=MarketInfo(Symbol(),MODE_MINLOT); if(minlot==0.001) Digitslots=3; if(minlot==0.01) Digitslots=2; if(minlot==0.1) Digitslots=1; if(MarketInfo(Symbol(),MODE_DIGITS)==5 || MarketInfo(Symbol(),MODE_DIGITS)==3) { Print("五位小数平台."); db=10; } else Print("四位小数平台."); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---- Comment(""); //---- return; } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void OnTick() { //---- int buys=0,sells=0,signal=0; int result=0; double LastBuyPrice=0,LastSellPrice=0,SLp=0,TPp=0; double top=0,tol=0,avp=0; //----统计 for(i=0; i<=OrdersTotal()-1; i++) { result=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { buys++; LastBuyPrice=OrderOpenPrice(); tol=tol+OrderLots(); top=top+OrderLots()*OrderOpenPrice(); if(SLp==0 && SL>0) SLp=OrderOpenPrice()-SL*db*Point; } if(OrderType()==OP_SELL) { sells++; LastSellPrice=OrderOpenPrice(); tol=tol+OrderLots(); top=top+OrderLots()*OrderOpenPrice(); if(SLp==0 && SL>0) SLp=OrderOpenPrice()+SL*db*Point; } } } if(tol>0) { avp=NormalizeDouble(top/tol,Digits); if(buys>0) TPp=avp+TP*db*Point; if(sells>0) TPp=avp-TP*db*Point; } //----显示信息--- int ti; if(buys>0) ti=buys; else ti=sells; string dsy="\nWinKey\n"; dsy=dsy+"===================\n"; dsy=dsy+"P.Lots ="+DoubleToStr(NormalizeDouble(lots,Digitslots),Digitslots) +"\n"; dsy=dsy+"P.SL ="+IntegerToString(SL) +"\n"; dsy=dsy+"P.TP ="+IntegerToString(TP) +"\n"; dsy=dsy+"P.MAGIC ="+IntegerToString(Magic) +"\n"; dsy=dsy+"===================\n"; dsy=dsy+"B.Numbers ="+IntegerToString(buys) +"\n"; dsy=dsy+"S.Numbers ="+IntegerToString(sells) +"\n"; dsy=dsy+"LastB.Price ="+DoubleToStr(LastBuyPrice,Digits) +"\n"; dsy=dsy+"LastS.Price ="+DoubleToStr(LastSellPrice,Digits) +"\n"; dsy=dsy+"SL.Price ="+DoubleToStr(SLp,Digits) +"\n"; dsy=dsy+"TP.Price ="+DoubleToStr(TPp,Digits) +"\n"; dsy=dsy+"NEXT.Lots ="+DoubleToStr(NormalizeDouble(Interval_Lots[ti]*lots,Digitslots),Digitslots) +"\n"; dsy=dsy+"NEXT.Pips ="+IntegerToString(Interval_Pips[ti]) +"\n"; dsy=dsy+"===================\n"; Comment(dsy); //----修改订单 for(i=0; i<=OrdersTotal()-1; i++) { result=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { if(SLp>0 && DoubleToStr(OrderStopLoss(),Digits)!=DoubleToStr(SLp,Digits)) { result=OrderModify(OrderTicket(),OrderOpenPrice(),SLp,OrderTakeProfit(),0,Green); if(result<0) Print("BUY 止损修改出错"+DoubleToStr(OrderStopLoss(),Digits)+"-->"+DoubleToStr(SLp,Digits)); else return; } if(TPp>0 && DoubleToStr(OrderTakeProfit(),Digits)!=DoubleToStr(TPp,Digits)) { result=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TPp,0,Green); if(result<0) Print("BUY 止盈修改出错"+DoubleToStr(OrderTakeProfit(),Digits)+"-->"+DoubleToStr(TPp,Digits)); else return; } } if(OrderType()==OP_SELL) { if(SLp>0 && DoubleToStr(OrderStopLoss(),Digits)!=DoubleToStr(SLp,Digits)) { result=OrderModify(OrderTicket(),OrderOpenPrice(),SLp,OrderTakeProfit(),0,Red); if(result<0) Print("SELL 止损修改出错"+DoubleToStr(OrderStopLoss(),Digits)+"-->"+DoubleToStr(SLp,Digits)); else return; } if(TPp>0 && DoubleToStr(OrderTakeProfit(),Digits)!=DoubleToStr(TPp,Digits)) { result=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TPp,0,Red); if(result<0) Print("SELL 止盈修改出错"+DoubleToStr(OrderTakeProfit(),Digits)+"-->"+DoubleToStr(TPp,Digits)); else return; } } } } //-------------------------------------------------- //第一单 if(buys+sells==0 && IsStop==false) { signal=signal(); if(signal==1 && NormalizeDouble(lots*Interval_Lots[buys],Digitslots)<=5) result=OrderSend(Symbol(), OP_BUY, NormalizeDouble(lots*Interval_Lots[buys],Digitslots), Ask, slippage*db, 0, 0, comt+"0", Magic, 0, Green); if(signal==-1 && NormalizeDouble(lots*Interval_Lots[sells],Digitslots)<=5) result=OrderSend(Symbol(), OP_SELL, NormalizeDouble(lots*Interval_Lots[sells],Digitslots), Bid, slippage*db, 0, 0, comt+"0", Magic, 0, Red); return; } //---- if(buys==0 && sells>0 && NormalizeDouble(lots*Interval_Lots[sells],Digitslots)<=5) { if(Bid-LastSellPrice>=Interval_Pips[sells]*db*Point && TimeCurrent()-Time[0]<60 && SLp-Bid>Interval_Pips[sells]*db*Point) { result=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lots*Interval_Lots[sells],Digitslots),Bid,slippage*db,0,0,comt+IntegerToString(sells),Magic,0,Red); return; } } if(buys>0 && sells==0 && NormalizeDouble(lots*Interval_Lots[buys],Digitslots)<=5) { if(LastBuyPrice-Ask>=Interval_Pips[buys]*db*Point && TimeCurrent()-Time[0]<60 && Ask-SLp>Interval_Pips[buys]*db*Point) { result=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lots*Interval_Lots[buys],Digitslots),Ask,slippage*db,0,0,comt+IntegerToString(buys),Magic,0,Green); return; } } //---- return; } //+------------------------------------------------------------------+ int signal() { int res; if(Close[1]<Open[1]) res=-1; else res=1; return(res); } //+------------------------------------------------------------------+
本人使用mql4语言编程多年,现在为了本吧的发展,特开帖免费 本人使用mql4语言编程多年,现在为了本吧的发展,特开帖免费答疑解惑,各位在学习mql4语言过程中有什么问题尽管提出来,本人看到就马上解答问题。 提问题还是请尽量描述清楚些。
10000一个半月到40000少见的可行暴力策略,能看出是E 10000一个半月到40000 少见的可行暴力策略,能看出是EA做的吗?
mql4语言难学吗? 今天在一个QQ群里面聊天,有一个朋友提出编程真难,马上其他很多人就都纷纷出来说,做交易难,编程是难上加难! 买了一本书,看了几天,下载了一些视频,都学了一遍,以为这样就能掌握EA编程,你想得太简单了。 EA编程的基础语法,的确两三天就可以学会,难的部分在于逻辑思维,一个策略拿过来之后,首先用伪代码的方式把程序写出来,然后具体每一个功能逐一去实现,很多细节部分的逻辑算法,解决方案会有很多个,你可以选择一个运行效率最高的,也可以选择一个繁琐但是逻辑简单的办法去实现,都没有问题。这种细致的逻辑思维部分,需要训练,大量的训练才可以很好的掌握,哪一个学编程的人不熬几十个通宵? 看到那么多做交易的人说编程难,他们哪里知道,我们只需要学会一门编程语言即可,而那些专职做程序的人,哪个不是学几门语言的? 我在小时候,就听过一句话“发明创造并不神秘,但也不那么简单”, 现在套用在EA编程上来,同样适用,EA编程真没有那么难。 自从我掌握了MQL4语言以来,就不断的编程ea,进行了大量的训练,达到自认比较精通之后, 也带了几名学徒,有学会的,也有没学会的。 2006年,青岛的史先生,一名数学老师,支付给我1000元,我只负责答疑解惑,他基本上天天问问题,不出2月,也会了。 2008年,四川的王小姐,人在加拿大,通过QQ找到了我,拜我为师,收费之后,她天天盯着我问,三个月后,她不问了,她说他已经会了。 2011年,襄阳的杜先生,人在北京开公司,通过QQ找到我后,不远万里从北京赶到深圳,支付给我一万元,并且租住在我住处附近,我每天下班教他编程,他因为生意繁忙,难以静心,几个月没学会,后面回去自己钻研,然后彼此交流,也学会了。 还有上海的石先生,福建的李先生,郑州的曲先生等等,还有一些人,我想不起来了,这些年,指导过的人不算多,十几位吧,大部分学会了。 学会EA编程并不能让你马上研发出圣杯,从此靠一段代码纵横外汇市场,赚取足够的财富,如果你懂交易,利用EA编程绝对可以让你的各种想法快速并尽可能准确的在市场验证,查找出问题和缺陷,从而不断去修正。 花费3个月学会EA编程,可以让你的外汇研究之路缩短时间, 如果你适合干交易这行,不懂编程的人,可能努力10年即可实现稳定盈利,但是懂编程之后,也许只要一年。 如果你不适合干交易这行,不懂编程的人,可能努力10年终于输光破产,但是懂编程的人,也许一年就能证明自己不行,从而离开这一行,开始新的征程! 最后,引用一句古话共勉: “天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。”
炒外汇的看看这里 http://hi.baidu.com/fx168
为你制作MT4外汇平台的自定义指标和智能交易系统
求购富士康生产的acer品牌型号为AL1713a的液晶显示器配件。 我的显示器坏了,修了几次都是搞不到电路板那一块里面的配件,希望富士康德员工给个建议。帮帮忙。。
[求助]我的显示器能修好吗?大概要多少钱呢? 我的显示器是acer的液晶,型号是AL1713A,因为是公司发的奖品,所以没有保修,拿去给人修,修了几天没有修好,说是电源坏了,当电源修好了后,又说显示芯片坏了,找不到配件,现在电路板上面搞得乱七八糟。像这种情况我该怎么办呢?我们都坚信液晶屏是好的,最大的可能是换一块电路板,我希望有人能回答我,像这种型号的显示器的电路板能不能买得到,大概要花多少钱?我是武汉市的郊区的,如果有谁能够修好,希望能联系我,我现在是求救无门啊?拜托各位帮个忙。。请能给我帮助的联系我的电子邮箱,我天天查收:
[email protected]
1
下一页