再发个简单的双均线系统,提供源码
很古老的均线系统,随手写的,初学者可以参考根据核心原理,大家可以拿去扩充一下,我刚才试着扩充加入其它因子,提升不大,可能是没找到合适的组合吧
RB 1H周期,malen1=10,malen2=50
//------------------------------------------------------------------------
// 简称:
// 名称:
// 类别: 公式应用
// 类型: 用户应用
// 输出: 穿堂风
//------------------------------------------------------------------------
Params
Numeric maLen1(10);
Numeric maLen2(50);
Numeric lots(1);
Numeric offset(0);
Vars
Numeric ma1;
Numeric ma2;
Numeric i_offset;
Begin
ma1 = Average(Open,maLen1);
ma2 = Average(Open,maLen2);
PlotNumeric("ma1",ma1);
PlotNumeric("ma2",ma2);
i_offset = offset*MinMove*PriceScale;
If(CurrentBar > maLen2)
{
If(MarketPosition == 0)
{
If(Open>ma1 and ma1>ma2)
{
Buy(lots,Open+i_offset);
Return;
}
If(Open < ma1 and ma1<ma2)
{
SellShort(lots,Open-i_offset);
Return;
}
}
If(MarketPosition == 1)
{
If(Open < ma1)
{
Sell(lots,Open-i_offset);
Return;
}
}
If(MarketPosition == -1)
{
If(Open > ma1)
{
BuyToCover(lots,Open+i_offset);
Return;
}
}
}
End
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 用户版本 2011/06/21 15:59
// 版权所有 穿堂风
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------ I_Offset 是滑点吧
If(MarketPosition == 0)
{
If(Open>ma1 and ma1>ma2)
{
Buy(lots,Open+i_offset);
Return;
}
If(Open < ma1 and ma1<ma2)
{
SellShort(lots,Open-i_offset);
Return;
}
}
两个Return有什么意义呢?第一个是不是Returen之后程序不再执行 If(Open < ma1 and ma1<ma2)及之后的判断,请指教一下 Return 就是让后面的代码无效,相当于goto EndIf
请问一下,这个系统测试下来效果还行啊,如果就拿这个系统实盘会出现什么问题呢? ma1>ma2
这里得改成 ma1>ma2,并且我觉得里面所有比较的都应该加上;
因为用的是开盘价,但这个ma1>ma2在收盘后才能确定,所以用开盘价开仓会造成信号闪烁; 楼上的朋友说得不错,因为ma1这时已经是用Close进行描绘的了
相当于未来函数,必须用Close描绘的Ma1才行,或者用Close进行Buy or Sell Return 就是让后面的代码无效,相当于goto EndIf
请问一下,这个系统测试下来效果还行啊,如果就拿这个系 ...
kings425 发表于 2011-7-7 00:02 http://www.tradeblazer.net/forum/images/common/back.gif
因为有两种情况,达到哪种情况,都不再往下走,直接return。 ma1>ma2
这里得改成 ma1>ma2,并且我觉得里面所有比较的都应该加上;
因为用的是开盘价,但这个 ...
hal5667 发表于 2011-7-7 00:18 http://www.tradeblazer.net/forum/images/common/back.gif
我均线都是用open算的,K线一出来就决定了ma1是否大于小于ma2,并且持续到K线结束也不会改变,怎么会闪烁?
我很多系统确实用了xxx的办法来防止闪烁和未来数据引用,但这里没必要啊 ma1 = Average(Open,maLen1);
是的哦,没有注意这句,的确是用OPEN来计算的均线
请问这类系统可以用于实盘么?具体要注意哪些问题? 楼上的朋友说得不错,因为ma1这时已经是用Close进行描绘的了
相当于未来函数,必须用Close描绘的Ma1 ...
kings425 发表于 2011-7-7 09:21 http://www.tradeblazer.net/forum/images/common/back.gif
你们所说的问题,我知道这是大家最容易犯的错误。
所以我在设计系统的时候,首先就是查看所有交易逻辑,确保没有引用未来数据,并且成交价格,成交时机都不会出现矛盾点,比如不能出现多种情况同时出现,无法区分先后,还有就是很多人都没考虑跳空。