穿堂风 发表于 2011-6-22 12:43:08

再发个简单的双均线系统,提供源码

很古老的均线系统,随手写的,初学者可以参考
根据核心原理,大家可以拿去扩充一下,我刚才试着扩充加入其它因子,提升不大,可能是没找到合适的组合吧
RB 1H周期,malen1=10,malen2=50

穿堂风 发表于 2011-6-22 12:43:47

//------------------------------------------------------------------------
// 简称:
// 名称:
// 类别: 公式应用
// 类型: 用户应用
// 输出: 穿堂风
//------------------------------------------------------------------------

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公式修改和重写的权利
//------------------------------------------------------------------------

kings425 发表于 2011-7-6 23:40:03

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)及之后的判断,请指教一下

kings425 发表于 2011-7-7 00:02:49

Return 就是让后面的代码无效,相当于goto EndIf

请问一下,这个系统测试下来效果还行啊,如果就拿这个系统实盘会出现什么问题呢?

hal5667 发表于 2011-7-7 00:18:44

ma1>ma2

这里得改成 ma1>ma2,并且我觉得里面所有比较的都应该加上;

因为用的是开盘价,但这个ma1>ma2在收盘后才能确定,所以用开盘价开仓会造成信号闪烁;

kings425 发表于 2011-7-7 09:21:51

楼上的朋友说得不错,因为ma1这时已经是用Close进行描绘的了

相当于未来函数,必须用Close描绘的Ma1才行,或者用Close进行Buy or Sell

穿堂风 发表于 2011-7-7 12:43:14

Return 就是让后面的代码无效,相当于goto EndIf

请问一下,这个系统测试下来效果还行啊,如果就拿这个系 ...
kings425 发表于 2011-7-7 00:02 http://www.tradeblazer.net/forum/images/common/back.gif


    因为有两种情况,达到哪种情况,都不再往下走,直接return。

穿堂风 发表于 2011-7-7 12:45:26

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的办法来防止闪烁和未来数据引用,但这里没必要啊

kings425 发表于 2011-7-7 12:51:39

ma1 = Average(Open,maLen1);

是的哦,没有注意这句,的确是用OPEN来计算的均线    

请问这类系统可以用于实盘么?具体要注意哪些问题?

穿堂风 发表于 2011-7-7 12:52:38

楼上的朋友说得不错,因为ma1这时已经是用Close进行描绘的了

相当于未来函数,必须用Close描绘的Ma1 ...
kings425 发表于 2011-7-7 09:21 http://www.tradeblazer.net/forum/images/common/back.gif


    你们所说的问题,我知道这是大家最容易犯的错误。
所以我在设计系统的时候,首先就是查看所有交易逻辑,确保没有引用未来数据,并且成交价格,成交时机都不会出现矛盾点,比如不能出现多种情况同时出现,无法区分先后,还有就是很多人都没考虑跳空。
页: [1] 2 3 4 5 6
查看完整版本: 再发个简单的双均线系统,提供源码