再續發一交易系統
作者:開拓者 TB 來源:cxh99.com 發布時間:2012年12月01日
- 咨詢內容:
If(BarStatus==2)
{
If(curProfit>maxProfit) maxProfit=curProfit;
If(curProfit<maxLoss) maxLoss=curProfit;
}
Else
{
If(tradState==1)
{
If((High-tradCost)>maxProfit) maxProfit=(High-tradCost);
If((Low-tradCost)<maxLoss) maxLoss=(Low-tradCost);
}
If(tradState==-1)
{
If((tradCost-Low)>maxProfit) maxProfit=tradCost-Low;
If((tradCost-High)<maxLoss) maxLoss=tradCost-High;
}
}
//平多反空
If(tradState==1 And sc And tradNum<maxTrad And Time>=0.0001*tradBegin And Time<=0.0001*tradEnd)
{
if(BarStatus==2)tradePrice= Q_BidPrice -splitDot; Else tradePrice=Open-splitDot;
If(SellShort(maxLots,tradePrice))
{
tradMem="平多反空-"+Text(tradePrice);Commentary(tradMem);
SetTBProfileString(pKey,pKeyTradProve,Text(1));
SetTBProfileString(pKey,pKeyTradState,Text(-1));
SetTBProfileString(pKey,pKeyTradCost,Text(tradePrice));
SetTBProfileString(pKey,pKeyTradNum,Text(1+tradNum));
SetTBProfileString(pKey,pKeyTradIdx,Text(CurrentBar()));
maxProfit=0;
maxLoss=0;
curProfit=0;
}
}
//平空反多
If(tradState==-1 And bc And tradNum<maxTrad And Time>=0.0001*tradBegin And Time<=0.0001*tradEnd)
{
if(BarStatus==2) tradePrice= Q_AskPrice +splitDot; Else tradePrice=Open+splitDot;
If(Buy(maxLots,tradePrice))
{
tradMem="平空反多-"+Text(tradePrice);Commentary(tradMem);
SetTBProfileString(pKey,pKeyTradProve,Text(1));
SetTBProfileString(pKey,pKeyTradState,Text(1));
SetTBProfileString(pKey,pKeyTradCost,Text(tradePrice));
SetTBProfileString(pKey,pKeyTradNum,Text(1+tradNum));
SetTBProfileString(pKey,pKeyTradIdx,Text(CurrentBar()));
maxProfit=0;
maxLoss=0;
curProfit=0;
}
}
tradCyc=(CurrentBar()-tradIdx);
tradMem="浮盈:"+Text(curProfit)+",最大浮盈:"+Text(maxProfit)+",倉期:"+Text(tradCyc);Commentary(tradMem);
dopos="";
//開倉BAR的處理
if(tradCyc==0)
{
}
//持倉BAR的處理
Else
if(tradCyc>0)
{
//開倉后第一根BAR的處理-應對bar走完后的信號消失問題**********************************************
if(tradCyc==1)
{
。。。。。
}
Else
dopos=DoPosition(tradState,tradCyc, curProfit, maxProfit, stopLoss, stopProfis,tracProfis,tracLoss,returnProfis,minProfis,maxHolds,closeTime);
} //位置=做位置 (持倉狀態,持倉周期,持倉當前浮動盈虧,持倉最大浮盈,虧損大于于此值時止損, )
dopos=DoPosition(tradState,tradCyc,curProfit,maxProfit,stopLoss,stopProfis,tracProfis,tracLoss,returnProfis,minProfis,maxHolds,closeTime);
//統一的平倉處理-------------------------------------------------------------------------------------------
//這里提點個人的想法,大家討論。
//樓主的框架是把所有的東西(開、平倉,止損,止盈,追蹤止盈,固定值止盈,回撤止盈)都放在一個交易指令中,
//本人以為,這種大而全的結構,很不易于維護,調試等。
//何不把這些分開到多個交易指令中呢?
//比如說 開,平倉一個指令,止損一個指令,止盈一個指令,追蹤止盈一個指令。
//這樣分成多個模塊好處是多多。
//在一個圖表中,插入多個指令,就像搭積木,把不同的指令組合起來可以得到不同的策略。
//fish0451 作者回復:有道理!
if(Len(dopos)>2)
{
//處理交易價格,叫賣叫買價加上滑點,便于成交
if(BarStatus==2)
{
If(tradState==1) tradePrice= Q_BidPrice -splitDot;
If(tradState==-1) tradePrice= Q_AskPrice +splitDot;
}Else tradePrice=Close-tradState*splitDot;
//平多
If(tradState==1)
{
If(Sell(maxLots,tradePrice))
{
tradMem=dopos+":平多-"+Text(tradePrice);
SetTBProfileString(pKey,pKeyTradProve,Text(1));
SetTBProfileString(pKey,pKeyTradState,Text(0));
maxProfit=0;
maxLoss=0;
}
}
//平空
If(tradState==-1)
{
If(BuyToCover(maxLots,tradePrice))
{
tradMem=dopos+":平空-"+Text(tradePrice);
SetTBProfileString(pKey,pKeyTradProve,Text(1));
SetTBProfileString(pKey,pKeyTradState,Text(0));
maxProfit=0;
maxLoss=0;
}
}
Commentary(tradMem);
}
}
}
End
- TB技術人員:
DoPosition 沒有定義啊,不能編譯過去,能否把DoPosition函數給出來