文章來源:123财經導航 | william
在學習了一系列基本的知識後,今天帶大家進入策略編寫的實戰部分,策略編寫包含三大核心:信号檢查、建倉管理、持倉管理(風險控制),通俗一點講就是:必須從清楚進場到出場出場的一個完整流程。
準備工作:
先寫好後續要使用到的外部參數。
input int fast =20,
slow =50,
magic =2024;
input double lot = 0.01;
input string cmt = "死亡均線";
信号定義:
本次策略講解我們以MA移動均線爲例進行講解,先來熟悉一下這個指标的基本參數;
首先檢查是否有新的 K 線生成,定義的一個 NewBar() 函數來實現。隻有在有新 K 線時,才會繼續執行後續的策略邏輯,以避免無節制的開倉。
信号判斷:
這裏使用了 iMA() 函數來計算移動平均線,并指定了不同的時間位移(2 和 1)來獲取當前和上一個 K 線的數值。根據兩組移動平均線的關系,判斷是否出現交叉信号:
完整代碼:
#property copyright "BBTrading"
#property link "https://www.00123.com"
#property strict
input int fast =20,
slow =50,
magic =2024;
input double lot = 0.01;
input string cmt = "死亡均線";
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnTick()
{
if(NewBar()){
double fast1 =iMA(Symbol(),PERIOD_CURRENT,slow,0,MODE_SMMA,PRICE_CLOSE,2);
double fast2 =iMA(Symbol(),PERIOD_CURRENT,fast,0,MODE_SMMA,PRICE_CLOSE,2);
double slow1 =iMA(Symbol(),PERIOD_CURRENT,slow,0,MODE_SMMA,PRICE_CLOSE,1);
double slow2 =iMA(Symbol(),PERIOD_CURRENT,fast,0,MODE_SMMA,PRICE_CLOSE,1);
if(fast1>fast2 && slow1<slow2){
CloseOrder(OP_SELL);
int res=OrderSend(_Symbol,OP_BUY,lot,Ask,20,0,0,cmt,magic);
}
if(fast1<fast2 && slow1>slow2){
CloseOrder(OP_BUY);
int res=OrderSend(_Symbol,OP_SELL,lot,Bid,20,0,0,cmt,magic);
}
}
}
void CloseOrder(int type)
{
for(int j = OrdersTotal() - 1; j >= 0; j--) {
if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES)){
if(OrderSymbol() == _Symbol && OrderMagicNumber()==magic && OrderType() == type){
bool close =OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10);
}
}
}
}
bool NewBar()
{
static datetime last;
if(last!= Time[0]){
last = Time[0];
return true;
}
return false;
删除后无法恢复
删除后无法恢复