期貨期權交流能否把下面的tb源碼轉換成mc的源碼
作者:MC 來源:cxh99.com 發布時間:2017年08月12日
-
咨詢內容:
Params ? ?? ???Numeric bollinglengths(50); ? ?? ???Numeric trendliqlength(50); ? ?? ???Numeric numstddevs(2); ? ?? ???Numeric swingprcnt1(0.5); ? ?? ???Numeric swingprcnt2(0.75); ? ?? ???Numeric atrlength(10); ? ?? ???Numeric swingtrendswitch(50); Vars ? ?? ?? ?? ?? ? BoolSeries swing(False); ? ?? ?? ?? ?? ? NumericSeries cmival; ? ?? ?? ?? ?? ? NumericSeries buyeasierday(0); ? ?? ?? ?? ?? ? NumericSeries selleasierday(0); ? ?? ?? ?? ?? ? NumericSeries trendlokbuy; ? ?? ?? ?? ?? ? NumericSeries trendloksell; ? ?? ?? ?? ?? ? NumericSeries trendbuypt; ? ?? ?? ?? ?? ? NumericSeries trendsellpt; ? ?? ?? ?? ?? ? NumericSeries keyofday; ? ?? ?? ?? ?? ? NumericSeries ma1; ? ?? ?? ?? ?? ? NumericSeries midd; ? ?? ?? ?? ?? ? Numeric swingprotstop;? ?? ??? ? ?? ?? ?? ?? ? Numeric atr; ? ?? ?? ?? ?? ? Numeric swingbuypt; ? ?? ?? ?? ?? ? Numeric swingsellpt; Begin ? ?? ???Commentary("BarInterval= "+Text(BarInterval)); ? ?? ?? ?? ?? ? cmival=Abs(Close[1]-Close[31])/(Highest(High[1],30)-Lowest(Low[1],30)); ? ?? ?? ?? ?? ? trendloksell=Average(Low[1],3*240/BarInterval); ? ?? ?? ?? ?? ? trendlokbuy=Average(High[1],3*240/BarInterval); ? ?? ?? ?? ?? ? keyofday=(HighD(0)+LowD(0)+CloseD(0))/3; ? ?? ?? ?? ?? ? If(Date<>Date[1]){ ? ?? ?? ?? ?? ? If(CloseD(1)>keyofday[1]) ? ?? ?? ?? ?? ? { ? ?? ?? ?? ?? ? selleasierday=1;//空頭日 ? ?? ?? ?? ?? ? }Else{ ? ?? ?? ?? ?? ? buyeasierday=1;//多頭日 ? ?? ?? ?? ?? ? } } ? ?? ???Atr=XAverage(TrueRange,atrlength*240/BarInterval); If(buyeasierday==1){ ? ?? ???swingbuypt=OpenD(0)+swingprcnt1*atr; ? ?? ???swingsellpt=OpenD(0)-swingprcnt2*atr; } If(selleasierday==1){ ? ?? ???swingbuypt=OpenD(0)+swingprcnt2*atr; ? ?? ???swingsellpt=OpenD(0)-swingprcnt1*atr; } swingbuypt=Max(swingbuypt,trendlokbuy); swingsellpt=Min(swingsellpt,trendloksell); ?? PlotNumeric("Buy",swingbuypt); PlotNumeric("Sell",swingsellpt); ?? ma1=Average(Close[1],trendliqlength);//趨勢均線 midd=Average(Close[1],bollinglengths);//布林中線 trendbuypt=midd+numstddevs*StandardDev(Close[1],bollinglengths); trendsellpt=midd-numstddevs*StandardDev(Close[1],bollinglengths); ?? If(cmival<swingtrendswitch/100) { ? ?? ???If(MarketPosition==0&&High[1]>=swingbuypt) ? ?? ???//開多倉 { ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???Buy(1,Max(Open,swingbuypt)); ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???swing=True; } ? ?? ???If(MarketPosition==0&&Low[1]<=swingsellpt) ? ?? ???//開空倉 { ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???SellShort(1,Min(Open,swingsellpt)); ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???swing=True; } If(MarketPosition>0&&Low[1]<=swingsellpt) //多頭反手 { ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???SellShort(1, Min(Open,swingsellpt)); ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???swing=True; } If(MarketPosition<0&&High[1]>=swingbuypt) //空頭反手 { ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???Buy(1, Max(Open,swingbuypt)); ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???swing=True; } }Else{ ? ?? ???swingprotstop=atr*3; ? ?? ???If(MarketPosition==0&&High[1]>=trendbuypt) //開多倉 { ? ?? ???Buy(1,Max(Open,trendbuypt)); ? ?? ???swing=False; } If(MarketPosition==0&&Low[1]<=trendsellpt) //開空倉 { ? ?? ???SellShort(1,Min(Open,trendsellpt)); ? ?? ???swing=False; } If(MarketPosition>0&&swing) //多頭止損 { ? ?? ???If(Low[1]<=EntryPrice-swingprotstop) { ? ?? ???Sell(1,Min(Open, EntryPrice-swingprotstop)); }Else If(Low[1]<=ma1) { ? ?? ???Sell(1,Min(Open,ma1)); } } If(MarketPosition<0&&swing) //空頭止損 { ? ?? ???If(High[1]>=EntryPrice+swingprotstop) { ? ?? ???BuyToCover(1,Max(Open, EntryPrice+swingprotstop)); }Else If(High[1]>=ma1) { ? ?? ???BuyToCover (1,Max(Open,ma1)); } } } ?? End
?
-
MC技術部:
inputs: bollinglengths(50), trendliqlength(50), numstddevs(2), swingprcnt1(0.5), swingprcnt2(0.75), atrlength(10), swingtrendswitch(50);
Vars: swing(False), cmival(0), buyeasierday(0), selleasierday(0), trendlokbuy(0), trendloksell(0), trendbuypt(0), trendsellpt(0), keyofday(0),
ma1(0), midd(0), swingprotstop(0), atr(0), swingbuypt(0), swingsellpt(0);
Commentary("BarInterval= "+Text(BarInterval));
cmival=Absvalue(Close[1]-Close[31])/(Highest(High[1],30)-Lowest(Low[1],30));
trendloksell=Average(Low[1],3*240/BarInterval);
trendlokbuy=Average(High[1],3*240/BarInterval);
keyofday=(HighD(0)+LowD(0)+CloseD(0))/3;
if date<>date[1] then
if closed(1)>keyofday[1] then
selleasierday=1
else buyeasierday=1;
Atr=XAverage(TrueRange,atrlength*240/BarInterval);
If buyeasierday=1 then begin
? ?? ???swingbuypt=OpenD(0)+swingprcnt1*atr;
? ?? ???swingsellpt=OpenD(0)-swingprcnt2*atr;
end;
If selleasierday=1 then begin
? ?? ???swingbuypt=OpenD(0)+swingprcnt2*atr;
? ?? ???swingsellpt=OpenD(0)-swingprcnt1*atr;
end;
swingbuypt=Maxlist(swingbuypt,trendlokbuy);
swingsellpt=Minlist(swingsellpt,trendloksell);
??
ma1=Average(Close[1],trendliqlength);
midd=Average(Close[1],bollinglengths);
trendbuypt=midd+numstddevs*StandardDev(Close[1],bollinglengths,1);
trendsellpt=midd-numstddevs*StandardDev(Close[1],bollinglengths,1);
??
If cmival<(swingtrendswitch/100) then begin
? ?? ???If MarketPosition=0 and High[1]>=swingbuypt then begin
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???Buy 1 shares next bar at Maxlist(Open,swingbuypt) limit;
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???swing=True;
end;
? ?? ???If MarketPosition=0 and Low[1]<=swingsellpt then begin
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???SellShort 1 shares next bar at Minlist(Open,swingsellpt) limit;
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???swing=True;
end;
? ?? ???If MarketPosition>0 and Low[1]<=swingsellpt then begin
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???SellShort 1 shares next bar at Minlist(Open,swingsellpt) limit;
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???swing=True;
end;
? ?? ???If MarketPosition<0 and High[1]>=swingbuypt then begin
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???Buy 1 shares next bar at Maxlist(Open,swingbuypt) limit;
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???swing=True;
end
Else begin
? ?? ???swingprotstop=atr*3;
? ?? ???If MarketPosition=0 and High[1]>=trendbuypt then begin
? ?? ???Buy 1 shares next bar at Maxlist(Open,trendbuypt) limit;
? ?? ???swing=False;
end;
If MarketPosition=0 and Low[1]<=trendsellpt then begin
? ?? ???SellShort 1 shares next bar at Minlist(Open,trendsellpt) limit;
? ?? ???swing=False;
end;
If MarketPosition>0 and swing then
? ?? ???If Low[1]<=EntryPrice-swingprotstop then
? ?? ???Sell 1 shares next bar at Minlist(Open, EntryPrice-swingprotstop) limit
Else If Low[1]<=ma1 then
? ?? ???Sell 1 shares next bar at Minlist(Open,ma1) limit;
If MarketPosition<0 and swing then
? ?? ???If High[1]>=EntryPrice+swingprotstop then
? ?? ???BuyToCover 1 shares next bar at Maxlist(Open, EntryPrice+swingprotstop) limit
Else If High[1]>=ma1 then
? ?? ???BuyToCover 1 shares next bar at Maxlist(Open,ma1) limit;
end;
end;
以上部分是翻譯過來的MC代碼,但是有幾點需要告訴您:
一、opend、highd、lowd和closed在TB和MC中都有這些函數,功能也是一樣的,但是TB的這四個函數取的是日K線上的四個價格,而MC的這四個函數取的是時間段00:00:00到23:59:59時間范圍內的開高低收四個價格。
二、entryprice同樣在MC和TB中都有,功能也是一樣的,但是TB中只是表示當前部位的第一筆進場價格,不帶參數;而MC中這個后面不帶參數和帶有參數0意思是一樣的,都表示當前未平倉部位第一筆進場價格,后面帶1表示前一個平倉部位第一筆進場的價格,以此類推,后面還可以帶其它正數表示相應的意思。
三、函數standarddev需要有三個參數,已經幫您更改了。
四、如果您需要更準確的用MC執行您的交易策略,您需要貼上您的策略邏輯。