yunkaicn | 2006-12-02 12:59 | #property copyright "Copyright ?2006, yunkaicn" FK-}i|di #property link "hi.baidu.com/fx168" UB5}i('L #define MAGICMA 20061007 qw6EPC aIQrb extern double Lots = 0.1; //交易量 =|^X$H extern double maperiod1 = 3; s.<olxXRW extern double maperiod2 = 27; >&*6Fqd z:d Xc double ma11,ma12,ma21,ma22; Z}]:x `fXd //+------------------------------------------------------------------+ 9m<wcZ //| 计算当前交易货币的订单数量函数,返回的结果为0则没有订单, V`WI"HO+ // 为-1就是有一张空单,为1就是有一张多单. bx+(.F //+------------------------------------------------------------------+ jrDz7AfA int CalculateCurrentOrders(string symbol) tXssejiE% { @t{{Q1 int buys=0,sells=0; O[i2A ( //---- r< d? for(int i=0;i &4ug3 { G #_(7X& if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; D@/9+]-, if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) MY0[Oq cm= { i]h R7g< if(OrderType()==OP_BUY) buys++; *YiD B?Si if(OrderType()==OP_SELL) sells++; _BeX7 } @n ~ND). } 9I^H)~S //---- 返回函数结果 n]6w)wE ( if(buys>0) return(buys); Ed ?Yk* 4 else return(-sells); |eVTxeq } 6P/9Vh j' //+------------------------------------------------------------------+ r(/P||`l //| 开仓函数,由主函数引用,条件是当前货币订单数为0.-------------------| J[_?>YJ //+------------------------------------------------------------------+ 'E4(!H,k void CheckForOpen() oeU+?-y/b { p_kTLNZd9 int res; r0XGGLFuZl @tU>~y{E //----[1] ^LAS9K1. if(ma12>ma22 && ma21>ma11) t3h \.(mq { E<.{ v\ //-[3] tZ6v@W res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red); U S~JLJI if(res>0) Vt 5XC~jK { "Mu $3 w if(OrderSelect(res,SELECT_BY_TICKET,MODE_TRADES)) 4?6'~G$k Alert(Symbol(),"卖单已经开了,价格是:",OrderOpenPrice()); :y)&kJpleP } ?%TM7Z4 else Alert(Symbol(),"卖单开仓出错:",GetLastError()); UmHb-uk ; return; Op)R3qt{ return; jYssz4)tp nT6iS}h //-[/3] t7& GCZ } +]2~ @=<@ if(ma12 9n2%7dLQ* { [ Sa C *fyEw\`a res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",MAGICMA, 0, Red); GeR -k9 if(res>0) m,"tdVo. { C)dYAq3,8 if(OrderSelect(res,SELECT_BY_TICKET,MODE_TRADES)) ?DTP-#5Ba Alert(Symbol(),"买单已经开了,价格是:",OrderOpenPrice()); H s 3*OhK\ } im%3*bv- else Alert(Symbol(),"买单开仓出错:",GetLastError()); y^ fU_L?p return; \X p"I5 } eNskuG|1 //-[/2] tOVm~C,R 3`!KndY1 //----[/1] SuuS!U+i> return(0); P.P>@@+d } )SLs [ //+------------------------------------------------------------------+ >C66X?0cd //| 平仓函数,由主函数引用,条件是当前货币订单数不为0.------------------| Ku'U^=bVm: //+------------------------------------------------------------------+ v%Xe)D void checkforclose() |Q;1;QXd { M] *pBc(o0 int res,rey; 7mBL#T2 for(int i=0;i %W+ F e,] { 55\mQ|.Jn if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; zBfBYhS- if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) P!EX;+7+x { H'> if(OrderType()==OP_BUY) UJ:B:hh'' //平仓-买单 NBX/V^ { %|>i2 if(ma12>ma22 && ma21>ma11) (WvA9s{/ { '-=?lyKv //-[3] "?SnA +) res=OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); S8l+WF4q if(res>0) ^Tx1y[hw$ { m`~ Qr~ rey=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MAGICMA,0,Red); Qs a2iw{ { szHUHW~;J if(OrderSelect(rey,SELECT_BY_TICKET,MODE_TRADES)) @Klj!2cv$ Alert(Symbol(),"买单已经平仓,并且卖单已经开了,价格是:",OrderOpenPrice()); `0D+ x else Alert(Symbol(),"卖单开仓出错:",GetLastError());}} V.J%4&^X return; sp%7iNs return; tyh%s" -nW-I\d% //-[/3] \xt!b^d0 } @azS)4L } a <3oyY' //平仓-买单结束 QO8/?^d if(OrderType()==OP_SELL) ~'ovJ46tx //平仓-卖单 z"<PveVo { n}l Z if(ma12 C oaqi`v4T { $z<CkMP!U7 //-[3] #8PjYB res=OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); $1axZ~8sS if(res>0) 3}"VUS0wh { c6e?)(V> rey=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",MAGICMA,0,Red); 9qw~]W~Nm { 1Ao"DxZHy7 if(OrderSelect(rey,SELECT_BY_TICKET,MODE_TRADES)) hVd63_OO Alert(Symbol(),"卖单已经平仓,并且买单已经开了,价格是:",OrderOpenPrice()); ~WVrtYJu else Alert(Symbol(),"买单开仓出错:",GetLastError());}} Sna7r~ j return; nF7Ozxm# return; ^fRA$t {~Phc 2z //-[/3] IuRKj8J)o } w@hm>6j } Cfa?LgSz //平仓-卖单结束 hMi`n6m } y+@7k3" } &g|-3)A gR%fv ![ Fb~Egc } g;vG6!;E\ Q!MS_ #O /qEoiL### //+------------------------------------------------------------------+ :,% vAI //| 启动函数。 | d_]zX;_ //+------------------------------------------------------------------+ Q"S;r1 D int start() ?x=;?7 { b+9M? k" ma11=iMA(NULL,0,maperiod1,0,MODE_EMA,PRICE_CLOSE,1); rgJKXl;@s ma12=iMA(NULL,0,maperiod1,0,MODE_EMA,PRICE_CLOSE,2); >S,yqKp37~ ma21=iMA(NULL,0,maperiod2,0,MODE_EMA,PRICE_CLOSE,1); QJ\ o"c ma22=iMA(NULL,0,maperiod2,0,MODE_EMA,PRICE_CLOSE,2); 4f:B2x{ pa*bqPi if(Bars<100 || IsTradeAllowed()==false) return; Bq3"l%hI //---- calculate open orders by current symbol #(=8 RA:@ if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); 2+ m%f" else checkforclose(); 3copJS } :[YHJaK //+------------------------------------------------------------------+ | |