- 精华
- 0
- 在线时间
- 72 小时
- UID
- 5004
- 积分
- 290
- 帖子
- 69
- 阅读权限
- 50
- 注册时间
- 2009-8-3
- 最后登录
- 2019-3-24
- 精华
- 0
- UID
- 5004
- 积分
- 290
- 帖子
- 69
- 主题
- 18
- 阅读权限
- 50
- 注册时间
- 2009-8-3
- 最后登录
- 2019-3-24
|
TB上写公式,一般写两套,一套用来测试历史数据,一套用来实盘交易。今天写了个55日海龟实盘交易系统,下面几天打算拿过来放在10s bar 上面用模拟帐户测试一下。
这个公式的主要思想是这样:
首先,因为海龟交易系统在单一市场上最多持仓4个单位,所以第一步是判断目前的持仓状况。根据不同的持仓状况进行讨论。
第二,因为实盘交易的时候,监控的是实时的tick数据,因此,判断建仓或者平仓的时候,就直接根据Q_last即实时价格来判断。
第三,为了提高程序运行效率,用了很多return。
具体的代码如下,欢迎指正:- Vars
- Numeric Minpoint;
- Numeric Qhold;
- Numeric N;
- Numeric TotalEquity;
- Numeric TurtleUnits;
- Numeric L20;
- Numeric H20;
- Numeric L55;
- Numeric H55;
- numeric rprice;
- Begin
- MinPoint = MinMove*PriceScale;
- N = AverageFC(TrueRange,20);
- TotalEquity = CurrentCapital()+ Abs(CurrentContracts()*Close*ContractUnit()*BigPointValue()*MarginRatio());
- TurtleUnits = (TotalEquity/100) /(N * ContractUnit()*BigPointValue());
- TurtleUnits = IntPart(TurtleUnits);
- Qhold=A_TotalPosition/TurtleUnits;
- Qhold=RoundUp(Qhold,0);
- H55=HighestFC(High[1],55);
- L55=LowestFC(low[1],55);
- H20=HighestFC(High[1],20);
- L20=LowestFC(Low[1],20);
- rprice=A_orderfilledprice(0);
- if (Qhold==-4)
- {if(Q_last>rprice+2*N || Q_last>H20)
- {A_sendorder(enum_buy,enum_exit,A_sellposition(),Q_AskPrice());
- Return;}
- Return;}
- if (Qhold==-3)
- {if (Q_last>rprice+2*N || Q_last>H20)
- {A_sendorder(enum_buy,enum_exit,A_sellposition(),Q_AskPrice());
- Return;}
- if (Q_last<rprice-0.5*N)
- {A_sendorder(enum_sell,enum_entry,TurtleUnits,Q_bidprice());
- Return;}
- Return;}
- if (Qhold==-2)
- {if (Q_last>rprice+2*N || Q_last>H20)
- {A_sendorder(enum_buy,enum_exit,A_sellposition(),Q_askprice());
- Return;}
- if (Q_last<rprice-N)
- {A_sendorder(enum_sell,enum_entry,2*TurtleUnits,Q_bidprice());
- Return;}
- if (Q_last<rprice-0.5*N)
- {A_sendorder(enum_sell,enum_entry,TurtleUnits,Q_bidprice());
- Return;}
- Return;}
- if (Qhold==-1)
- {if (Q_last>rprice+2*N || Q_last>H20)
- {A_sendorder(enum_buy,enum_exit,A_sellposition(),Q_askprice());
- Return;}
- if (Q_last<rprice-1.5*N)
- {A_sendorder(enum_sell,enum_entry,3*TurtleUnits,Q_bidprice());
- Return;}
- if (Q_last<rprice-N)
- {A_sendorder(enum_sell,enum_entry,2*TurtleUnits,Q_bidprice());
- Return;}
- if (Q_last<rprice-0.5*N)
- {A_sendorder(enum_sell,enum_entry,TurtleUnits,Q_bidprice());
- Return;}
- Return;}
- if (Qhold==0)
- {if (Q_last>H55+1.5*N)
- {A_sendorder(enum_buy,enum_entry,4*TurtleUnits,Q_askprice());
- Return;}
- if (Q_last>H55+N)
- {A_sendorder(enum_buy,enum_entry,3*TurtleUnits,Q_askprice());
- Return;}
- if (Q_last>H55+0.5*N)
- {A_sendorder(enum_buy,enum_entry,2*TurtleUnits,Q_askprice());
- Return;}
- if (Q_last>H55)
- {A_sendorder(enum_buy,enum_entry,TurtleUnits,Q_askprice());
- Return;}
- if (Q_last <L55)
- {A_sendorder(enum_sell,enum_entry,TurtleUnits,Q_bidprice());
- Return;}
- if (Q_last<L55-0.5*N)
- {A_sendorder(enum_sell,enum_entry,2*TurtleUnits,Q_bidprice());
- Return;}
- if (Q_last<L55-N)
- {A_sendorder(enum_sell,enum_entry,3*TurtleUnits,Q_bidprice());
- Return;}
- if (Q_last<L55-1.5*N)
- {A_sendorder(enum_sell,enum_entry,4*TurtleUnits,Q_bidprice());
- Return;}
- Return;}
- if (Qhold==1)
- {if (Q_last<rprice-2*N || Q_last<L20)
- {A_sendorder(enum_sell,enum_exit,A_buyposition(),Q_bidprice());
- Return;}
- if (Q_last>rprice+1.5*N)
- {A_sendorder(enum_buy,enum_entry,3*TurtleUnits,Q_askprice());
- Return;}
- if (Q_last>rprice+N)
- {A_sendorder(enum_buy,enum_entry,2*TurtleUnits,Q_askprice());
- Return;}
- if (Q_last>rprice+0.5*N)
- {A_sendorder(enum_buy,enum_entry,TurtleUnits,Q_askprice());
- Return;}
- Return;}
- if (Qhold==2)
- {if (Q_last<rprice-2*N || Q_last<L20)
- {A_sendorder(enum_sell,enum_exit,A_buyposition(),Q_bidprice());
- Return;}
- if (Q_last>rprice+N)
- {A_sendorder(enum_buy,enum_entry,2*TurtleUnits,Q_askprice());
- Return;}
- if (Q_last>rprice+0.5*N)
- {A_sendorder(enum_buy,enum_entry,TurtleUnits,Q_askprice());
- Return;}
- Return;}
- if (Qhold==3)
- {if (Q_last<rprice-2*N || Q_last<L20)
- {A_sendorder(enum_sell,enum_exit,A_buyposition(),Q_bidprice());
- Return;}
- if (Q_last>rprice+0.5*N)
- {A_sendorder(enum_buy,enum_entry,TurtleUnits,Q_askprice());
- Return;}
- Return;}
- if (Qhold==4)
- {if (Q_last<rprice-2*N || Q_last<L20)
- {A_sendorder(enum_sell,enum_exit,A_buyposition(),Q_bidprice());
- Return;}
- Return;}
- End
复制代码 |
|