首页学院交易策略EA智能交易文章详细

EA(原码)学习

外汇网2021-06-17 09:41:55 106
汇外网 - 全球专业的黄金外汇门户导航行情资讯网站

//+------------------------------------------------------------------+

#property copyright "2009"

#property link " "

int MagicNumber = 0;

string EAname ="顺势";

int MAGICMA = 2000;

//定义资金管理--------------------------------------------------------+

extern string _资金管理_ ="任选一个";

extern bool zijiguanli1= true;//false true、、

extern bool zijiguanli2= false;//false true、、

extern bool zijiguanli3= false;//false true、、

// 定义各参数--------------------------------------------------------+

extern int FastEMA = 12;

extern int SlowEMA = 26;

extern int SignalSMA = 9;

//定义指标函数--------------------------------------------------------+

double ema120;

double sma20,sma21;

double ema15,ema16;

//定义止赢止损,滑点---------------------------------------------------+

double TP=0,TPP=0,SL=0,SLL=0; //赚120点出场,亏20点出场

int slip=6;

//定义移动止损-------------------------------------------------------+

int cnt;

extern double TrailingStop=20;//移动止损为20点

//+------------------------------------------------------------------+

double mode=0;

double LastOrderType;

double LastPricesell;

double LastPricebuy;

double LastPrice;

double OpenSells;

double OpenSellStops;

double OpenBuys;

double OpenBuyStops;

double SLauto;

string text="";

//定义下单信息--------------------------------------------------------+

extern double cheng=1;

double aa=0;

int s=0,b=0,i,panduan=0;

double CurrentBasket=0;

double LotMM=0;

double lotstart=0;

double LotsMax=100;

double LotsMin=0.1;

extern double lotab=1;

extern double Stoploss=0,no60=60;

double lots=0;

//有关保证金-----------------------------------------------------------+

double BaoZhenJing;

//+------------------------------------------------------------------+

int 分析=0,buy1=1,buy2=1,buy3=1,buy4=1,sell1=1,sell2=1,sell3=1,sell4=1;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//以后或许有用到

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//以后或许有用到

return(0);

}

//+------------------------------------------------------------------+

//| expert start 主程式

//+------------------------------------------------------------------+

int start()

{

MoneyManagement();

//资金管理

ma();

//指标管理

zhangchang();

//战场管理

jiancha();

//检查

TrailingStop();

//移动止损

xianshi();

//表明管理

return(0);

}

//资金管理-------------------------------------------------------------+

void MoneyManagement() {

lotstart=(AccountBalance()*lotab/10000);

lots=lotstart;

if(cheng==0){cheng=1;}

CurrentBasket=AccountEquity()-AccountBalance();

/////////////////////////////////////////////////////////////////

if(zijiguanli1){ LotMM = lots;}

/////////////////////////////////////////////////////////////////

if(zijiguanli2){

if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lots*(OrdersTotal()*cheng)+lotstart,2);

}

if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2);

}

}

/////////////////////////////////////////////////////////////////

if(zijiguanli3){

if(s+b==0){aa=1;}

if(s+b==1){aa=3;}

if(s+b==2){aa=7;}

if(s+b==3){aa=11;}

if(s+b==4){aa=20;}

if(s+b==5){aa=31;}

if(s+b==6){aa=42;}

if(s+b==7){aa=54;}

if(s+b==8){aa=66;}

if(s+b==9){aa=76;}

if(s+b>=10){aa=66;}

if(CurrentBasket<0 ) {LotMM=NormalizeDouble(lotstart*aa,2);

}

if(CurrentBasket==0 ) {LotMM=NormalizeDouble(LotMM*0,2);

}

}

/////////////////////////////////////////////////////////////////

if(LotMM

if(LotMM>LotsMax){LotMM=LotsMax;}

}//end 资金管理

//指标管理MA--------------------------------------------------------+

void ma() {

ema120 = iMA(NULL, PERIOD_M5, 120, 0, MODE_EMA, PR洲际交易所_CLOSE, 0);

sma20 = iMA(NULL, PERIOD_M5, 20, 0, MODE_SMA, PR洲际交易所_CLOSE, 0);

sma21 = iMA(NULL, PERIOD_M5, 20, 0, MODE_SMA, PR洲际交易所_CLOSE, 0+1);

ema15 = iMA(NULL, PERIOD_M5, 15, 0, MODE_EMA, PR洲际交易所_CLOSE, 0);

ema16 = iMA(NULL, PERIOD_M5, 15, 0, MODE_EMA, PR洲际交易所_CLOSE, 0+1);

}

//战场管理---------------------------------------------------------+

void zhangchang() {

//--- 假使开仓保证金胜过上限,则返还不交易。 ------------------

if( AccountMargin() / (AccountMargin() + AccountFreeMargin()) >= 1 ) { return(0);

}

BaoZhenJing = MarketInfo( Symbol(), MODE_MARGINREQUIRED);

// 一个标准手需保证金金额。

BaoZhenJing = BaoZhenJing * LotMM ; // 下单需用的保证金

if( (AccountMargin()+BaoZhenJing) / (AccountMargin()+AccountFreeMargin()) >= 1 ) { return(0);

}

//+-------------------------------------------------------------------+

if(s+b==111){buyme();

sellme();

CloseSell();

CloseBuy();

closeall();

}

datetime Time0 = 0;

if (Time0 != Time[0]){

Time0 = Time[0];

if(

(b==0 && ema120ema15 && sma21

}

if(

(s==0 && ema120>sma21 && sma20ema16)){分析=2;sellme();

}

}

if(分析==2 && b>0){CloseBuy();

}

if(分析==1 && s>0){CloseSell();

}

//if(s+b>0 && AccountProfit()>30){closeall();

}

if(sma20>ema15 b>0){CloseBuy();

}

if(sma200){CloseSell();

}

return(0);

}

//下单后没成交 撤单--------------------------------------------------------------+

//if (OrderSend==OP_BUY)

//if((OrderOpenPrice-OrderClosePrice)/Point > 100)

//OrderDelete(OrderTicket)};

//if (OrderSend==OP_SELL)

//if((OrderClosePrice-OrderOpenPrice)/Point > 100)

//OrderDelete(OrderTicket)};

//购入开单--------------------------------------------------------------+

void buyme(){

if (TP==0) { TPP=0; } if(TP>0) { TPP=Ask+TP*Point; }

if (SL==0) { SLL=0; } if(SL>0) { SLL=Ask-SL*Point; }

OrderSend(Symbol(),OP_BUY,LotMM,Ask,slip,SLL,TPP,"M"+Period()+"",0,0,Violet);

return(0);

}

//出售开单--------------------------------------------------------------+

void sellme(){

if (TP==0) { TPP=0; } if(TP>0) { TPP=Bid-(TP*Point);

}

if (SL==0) { SLL=0; } if(SL>0) { SLL=Bid+(SL*Point);

}

OrderSend(Symbol(),OP_SELL,LotMM,Bid,2,SLL,TPP,"M"+Period()+"",0,0,GreenYellow);

return(0);

}

//平仓持有的买单-------------------------------------------------------+

void CloseBuy()

{

if (OrdersTotal( ) > 0 )

{

for(i=OrdersTotal()-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)break;

if(OrderType()==OP_BUY)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

Sleep(5000);

} }}}

//平仓持有的卖单--------------------------------------------------------+

void CloseSell()

{

if (OrdersTotal( ) > 0 )

{

for(i=OrdersTotal()-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)break;

if(OrderType()==OP_SELL)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,White);

Sleep(5000);

} }}}

//平仓所有--------------------------------------------------------+

void closeall()

{

if (OrdersTotal( ) > 0 )

{

for(i=OrdersTotal()-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)break;

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)break;

if(OrderType()==OP_SELL)

if(OrderType()==OP_BUY)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,White);

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

Sleep(5000);

} }}}

//移动止损-----------------------------------------------------------+

void TrailingStop()

{

for(cnt=OrdersTotal();

cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() )//&& OrderMagicNumber()==MAGICMA)

{

if (OrderType()==OP_SELL)

{

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

if (OrderType()==OP_BUY)

{

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

} } } } } }

}

//检 查--------------------------------------------------------------+

void jiancha()

{

b=0;s=0;

for (int cnt=0; cnt<=OrdersTotal();

cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol()==Symbol() )

{

mode=OrderType();

LastOrderType=OrderType();

if (OrderType() == OP_SELL){ s++; LastPricesell=OrderOpenPrice();

}

if (OrderType() == OP_BUY ){ b++; LastPricebuy=OrderOpenPrice();

}

LastPrice=OrderOpenPrice();

if (OrderType()==OP_SELL) {OpenSells++;}

if (OrderType()==OP_SELLSTOP) {OpenSellStops++;}

if (OrderType()==OP_BUY) {OpenBuys++;}

if (OrderType()==OP_BUYSTOP) {OpenBuyStops++;}

}

}

}

//表明报告-----------------------------------------------------------+

void xianshi()

{

string name_8 = "xianshi1";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8, "伺服器时间::"+TimeToStr(CurTime( ))+"", 13, "Arial", White);

ObjectSet(name_8, OBJPROP_CORNER, 0);

ObjectSet(name_8, OBJPROP_XDISTANCE, 15);

ObjectSet(name_8, OBJPROP_YDISTANCE, 15);

ame_8 = "Lableyeddrice1";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8, "M"+Period()+" 货币 "+Symbol()+"", 10, "Arial", Silver);

ObjectSet(name_8, OBJPROP_CORNER, 1);

ObjectSet(name_8, OBJPROP_XDISTANCE, 130);

ObjectSet(name_8, OBJPROP_YDISTANCE, 32);

//////这个表明上方

name_8 = "LableCurPrice2";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8,""+DoubleToStr(Ask, Digits)+"::买上", 15, "Arial", Lime);

ObjectSet(name_8, OBJPROP_CORNER, 1);

ObjectSet(name_8, OBJPROP_XDISTANCE, 15);

ObjectSet(name_8, OBJPROP_YDISTANCE, 30);

//////这个表明以下

name_8 = "Lab345rPrice3";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8,""+DoubleToStr(Bid, Digits)+"::卖下", 15, "Arial", Lime);

ObjectSet(name_8, OBJPROP_CORNER, 1);

ObjectSet(name_8, OBJPROP_XDISTANCE, 15);

ObjectSet(name_8, OBJPROP_YDISTANCE, 50);

ame_8 = "Acc87lance";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8,""+DoubleToStr( AccountBalance(), 2)+"::账面资金", 13, "Arial", Lime);

ObjectSet(name_8, OBJPROP_CORNER, 1);

ObjectSet(name_8, OBJPROP_XDISTANCE, 15);

ObjectSet(name_8, OBJPROP_YDISTANCE, 70);

ame_8 = "LableC5rice6";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8,""+DoubleToStr( AccountEquity(), 2)+"::净值资金", 13, "Arial", Lime);

ObjectSet(name_8, OBJPROP_CORNER, 1);

ObjectSet(name_8, OBJPROP_XDISTANCE, 15);

ObjectSet(name_8, OBJPROP_YDISTANCE, 90);

ame_8 = "Labl456rice6";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8,""+DoubleToStr( AccountMargin(), 2)+"::保证资金", 13, "Arial", Lime);

ObjectSet(name_8, OBJPROP_CORNER, 1);

ObjectSet(name_8, OBJPROP_XDISTANCE, 15);

ObjectSet(name_8, OBJPROP_YDISTANCE, 110);

ame_8 = "Labl4hcjce6";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8,""+DoubleToStr( AccountFreeMargin(), 2)+"::可用资金", 13, "Arial", Lime);

ObjectSet(name_8, OBJPROP_CORNER, 1);

ObjectSet(name_8, OBJPROP_XDISTANCE, 15);

ObjectSet(name_8, OBJPROP_YDISTANCE, 130);

ame_8 = "Accvf7lance";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8,""+DoubleToStr( AccountProfit(), 2)+"::账面盈亏", 13, "Arial", Lime);

ObjectSet(name_8, OBJPROP_CORNER, 1);

ObjectSet(name_8, OBJPROP_XDISTANCE, 15);

ObjectSet(name_8, OBJPROP_YDISTANCE, 150);

aa=s+b;

name_8 = "Accvfee7lance";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8,""+DoubleToStr( aa, 0)+"::s+b", 13, "Arial", Lime);

ObjectSet(name_8, OBJPROP_CORNER, 1);

ObjectSet(name_8, OBJPROP_XDISTANCE, 15);

ObjectSet(name_8, OBJPROP_YDISTANCE, 170);

name_8 = "Acccvfee7lance";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8,""+b+"::buy", 13, "Arial", Lime);

ObjectSet(name_8, OBJPROP_CORNER, 1);

ObjectSet(name_8, OBJPROP_XDISTANCE, 15);

ObjectSet(name_8, OBJPROP_YDISTANCE, 190);

name_8 = "Acccwvfee7lance";

ObjectDelete(name_8);

ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);

ObjectSetText(name_8,""+s+"::sell", 13, "Arial", Lime);

ObjectSet(name_8, OBJPROP_CORNER, 1);

ObjectSet(name_8, OBJPROP_XDISTANCE, 15);

ObjectSet(name_8, OBJPROP_YDISTANCE, 210);

return(0);

}

标签:

随机快审展示
加入快审,优先展示

加入VIP