希望學習EA編程的朋友,可以參考如下我們提供的源碼【帶注釋】
這個EA例子的交易邏輯是:
N日高點 N日低點,超過高點做空,低過低點做多。www.emoneybtc.com
帶止損 止盈 及移動止損的處理部分。
如果你能細心研究掌握此EA的設計邏輯,基本可以入門MQL的實戰編程了。
還是那句老話:自己多動腦,多做實驗!
源碼如下:
#property copyright "Copyright ?2007, FXunion.com." //指標版權信息
#property link. "http://www.FXunion.com" //指標聯系的網站鏈接
//=====可調參數部分==============
#define Magic 20090101 //預定義的常量 Magic用於後面程序裡的開倉動作時標記在訂單裡面的一個符號,用於區別其他EA程序下的單 防止混亂
extern int N=50; //參數 後面程序裡用它作為N根K線的數量
extern int SL=100;//參數 後面程序裡下單的時候用這個設置的點數作為入場時訂單的止損價格。
extern int TrailingStop=30;//參數 後面程序裡用這個作為移動止損的點數設置
extern double 每單手數=0.1;//參數 表示後面下單的倉位的大小
extern int 滑點偏移點數=3;//參數 表示下單時 服務器端的價格與當前看到的價格相差的范圍,如果在此范圍內,則允許以服務器端的價格成交
//----全局變量===================
int Tick;//用於記錄訂單的唯一編號
double StopLost;//用於記錄止損
//========主函數部分開始============
int start()//主函數 沒來一個價格這個函數就運行一次
{
int Ticket; //局部變量 用於記錄每次下單後的狀態,用於判斷下單動作是否成功,如果不成功則做相應處理和提示
int rderTypeNow=GetOrderTypeHolding();//通過自定義函數得到當前持倉單的交易類型 買 賣
//自定義函數中做了處理,如果沒有發現當前有持倉 則返回-1
if (OrderTypeNow==-1)//空倉階段 -1表示沒有持倉的狀態
{
if (TradeOrNo(1))//多單入場條件 自定義函數TradeOrNo(1)參數1 表示針對多單的方向進行判斷是否滿足入場條件
{
Ticket=OrderSend(Symbol(),OP_BUY,每單手數,Ask,滑點偏移點數,Ask-SL*Point,0,"",Magic,0,0);//多單入場
//Ticket表示入場動作的執行結果,如果小於0表示入場動作失敗
if(Ticket<0)
{
Print("多單入場失敗"+GetLastError());
return(0); //推出本次start函數的執行
}
}else
if (TradeOrNo(2))//空單入場條件
{
Ticket=OrderSend(Symbol(),OP_SELL,每單手數,Bid,滑點偏移點數,Bid+SL*Point,0,"",Magic,0,0);
if(Ticket<0)
{
Print("空單入場失敗"+GetLastError());
return(0);
}
}
return;
}else//===============持倉階段===========================
{
switch(OrderTypeNow)
{
case OP_BUY://多單持倉情況下,滿足空單入場條件
if (TradeOrNo(2))
{
if(OrderClose(Tick,OrderLots(),Bid,滑點偏移點數)==false)//平掉多單持倉單
{
Print("翻轉發生 多頭平倉失敗"+GetLastError());
return;
}else//平倉後,反手建立空單
{
Ticket=OrderSend(Symbol(),OP_SELL,每單手數,Bid,滑點偏移點數,Bid+SL*Point,0,"",Magic,0,0);
if(Ticket<0)
{
Print("空單反手建倉失敗"+GetLastError());
return(0);
}
}
}else //判斷移動止損
{
if (Ask>StopLost+2*TrailingStop*Point)
{
OrderModify(Tick,OrderOpenPrice(),StopLost+TrailingStop*Point,0,0,CLR_NONE);
return;
}
}
break;
case OP_SELL:
if (TradeOrNo(1))
{
if(OrderClose(Tick,OrderLots(),Ask,滑點偏移點數)==false)//平掉空單持倉單
{
Print("翻轉發生 空頭平倉失敗"+GetLastError());
return;
}else//平倉後,反手建立多單
{
Ticket=OrderSend(Symbol(),OP_BUY,每單手數,Ask,滑點偏移點數,Ask-SL*Point,0,"",Magic,0,0);
if(Ticket<0)
{
Print("多單反手建倉失敗"+GetLastError());
return(0);
}
}
}else //判斷移動止損
{
if (Bid<StopLost-2*TrailingStop*Point)
{
OrderModify(Tick,OrderOpenPrice(),StopLost-TrailingStop*Point,0,0,CLR_NONE);
return;
}
}
break;
}
return;
}
return(-1);
}
//=================自定義函數部分======================================
int GetOrderTypeHolding()//從最近持倉單提取訂單類型,如果沒有持倉單,則認為是止贏出場或程序剛開始運行返回-1
{int Type=-1;
//int temptime=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
{
Type=OrderType();
Tick=OrderTicket();
StopLost=OrderStopLoss();
}
}
return(Type);
}
//======================================================
bool TradeOrNo(int Type)//判斷當前指定方向的入場條件是否成立
{
double NHigh=High[iHighest(Symbol(),0,MODE_HIGH,N,2)];
double NLow=Low[iLowest(Symbol(),0,MODE_LOW,N,2)];
switch(Type)
{
case 1://判斷多單入場條件是否成立
if (Close[1]>NHigh)//做多條件成立
{
return(true);
}
break;
case 2:
if (Close[1]<NLow)//做空條件成立
{
return(true);
}
break;
}
return(false);
}
區塊鏈及相關行業加速發展,全球正在跑步進入“區塊鏈經濟時代”,更多成熟應用在加速落地。不可回避的是:區塊鏈,將重新定義世界。區塊鏈技術被認
區塊鏈技術運用落地,目前可以實現的運用落地領域比較多,但是常見的以及運用最廣泛的還是下面講述的這幾大類,那麼落地區塊鏈技術運用還是需要找專
據報道,硅谷風投教父Tim Draper稱數字貨幣是分布式儲存、安全而全球流動的,而法幣任憑政治力量處置。他認為比特幣和其它數字貨幣將驅動
我國尚未建成打擊涉“區塊鏈”詐騙的完備治理體系,這方面的工作應當加緊進行。國家互聯網信息辦公室發布了《區塊鏈信息服務管理規定》,首次在
10月23日,由《華夏時報》、水皮雜談、華夏時報金融研究院以及Cointelegraph 中文共同主辦的“探索變革,服務產業2020華夏時
根據《上海證券交易所科創板股票上市規則(2020年12月修訂)》所述:12.1.1上市公司觸及本規則規定的退市情形,導致其股票存在
做國際原油期貨交易怎麼才能賺錢? 那麼,炒國際原油期貨怎麼才能賺錢?一起來看看吧。一:累積實戰經驗 經驗是投資能否獲
現在快捷支付除了用支付寶和微信之外還可以用銀聯雲閃付,不過對於用慣了前兩種方法的人來說可能不太清楚銀聯雲閃付是什麼,有些人就在懷疑
最佳答案: 這個是有可能的,不過主要還是看是什麼原因導致被降額的。1、如果是因為套現被銀行降額,這種
最佳答案: 社保是國家提供的一項福利性保障,保費低、保障全、保額高,最重要的是投保門檻低,能很好地預