开拓者期货期权程序化系统交易论坛

标题: 请帮忙改写均线顺势交叉模板? [打印本页]

作者: b8866    时间: 2008-6-20 12:43:43     标题: 请帮忙改写均线顺势交叉模板?

举个简单的例子,希望老师给个模板,好让我参考一下,谢谢,比如简单的均线顺势交叉:
1做多:MA30均线向上,并且MA5均线金叉MA20时做多,设止勋30点,获利100点,追踪止勋40;
2做空:MA30均线向下,并且MA5均线死叉MA20时做空,设止勋30点,获利100点,追踪止勋40;
3多单平仓条件:
                MA5均线在MA30之上超出40点并且MA5均线死叉MA20时平仓多单,或者2次MA5均线死叉MA20,
                平仓条件符合后,必须还符合多持仓获利大于30点;
4空单平仓条件:
                MA5均线在MA30之下超出40点并且MA5均线金叉MA20时平仓多单,或者2次MA5均线金叉MA20,
                平仓条件符合后,必须还符合空持仓获利大于30点;
每次进单一手,以下是我自己编的老是提示出错,请老师批改,谢谢:
Params
        Numeric StopLoss(30); //止勋30点
        Numeric TrailingStop(40); //追踪止勋40
        Numeric TakeProfit(100); //获利100点
        Numeric Lots(1); //进单一手
        Numeric M5(5);
        Numeric M20(20);
        Numeric M30(30);
Vars   
        NumericSeries MA5;
        NumericSeries MA20;
        NumericSeries MA30;
        Bool BK1;
        Bool SK1;
        Bool BP1;
        Bool BP2;
        Bool SP1;
        Bool SP2;       
Begin
   MA5=AverageFC(Close,M5);
   MA20=AverageFC(Close,M20);
   MA30=AverageFC(Close,M30);
   If(MarketPosition ==0 )  // 当前空仓
     {
        BK1=COUNTIF(MA30[0]>MA30[1],3)>2&&CrossOver(MA5,MA20);
        SK1=COUNTIF(MA30[0]<MA30[1],3)>2&&CrossOver(MA20,MA5);
               if (BK1) //多条件
            {
                Buy(Lots,Close); //买进单一手
                SetStopLoss(1,StopLoss,false); //设止勋30点
                SetProfitTarget(1,TakeProfit,false); //设获利100点
               SetDollarTrailing(TrailingStop,false); //设追踪止勋40
            }

          if (SK1) //空条件
             {
                SellShort(Lots,Close); //卖出单一手
                SetStopLoss(1,StopLoss,false); //设止勋30点
                SetProfitTarget(1,TakeProfit,false); //设获利100点
               SetDollarTrailing(TrailingStop,false); //设追踪止勋40
             }
       }

If(MarketPosition ==1 )  // 有多仓的情况
   {
         SP1=MA5>MA30&&(MA5-MA30)>40&&CrossOver(MA20,MA5); //多平条件1
         SP2=COUNTIF(CrossOver(MA20,MA5),25)>=2; //多平条件2
    if ((SP1||SP2)&&A_BuyProfitLoss()>30)  //在多仓盈利超30点后并且符合多平仓条件
             {
                Sell; //卖出平仓
             }
    }
If(MarketPosition ==-1 )  // 有空仓的情况
   {
         BP1=MA5<MA30&&(MA30-MA5)>40&&CrossOver(MA5,MA20); //空平条件1
         BP2=COUNTIF(CrossOver(MA5,MA20),25)>=2; //空平条件2
    if ((BP1||BP2)&&A_SellProfitLoss()>30)  //在空仓盈利超30点后并且符合空平仓条件
             {
                BuyToCover(Lots,Close) ;  //卖出平仓
             }
    }

End       

错误提示为无法识别的字符串: if ((SP1||SP2)&&A_BuyProfitLoss()>30) 和 if ((BP1||BP2)&&A_SellProfitLoss()>30)
希望各位老师,版主帮忙修改,谢谢,谢谢了
作者: nopain    时间: 2008-6-20 13:21:08

上面的写法,问题比较多,我重新写过如下:
  1. Params
  2.     Numeric StopLoss(30);                         // 止损30点
  3.     Numeric TrailingStop(40);                 // 追踪止损40点
  4.     Numeric TakeProfit(100);                 // 获利100点
  5.     Numeric Lots(1);                                 // 进单一手
  6.     Numeric M5(5);
  7.     Numeric M20(20);
  8.     Numeric M30(30);
  9. Vars
  10.     Numeric MinPoint;
  11.     NumericSeries MA5;
  12.     NumericSeries MA20;
  13.     NumericSeries MA30;

  14.     Bool BK1;
  15.     Bool SK1;
  16.     Bool BP1;
  17.     Bool BP2;
  18.     Bool SP1;
  19.     Bool SP2;
  20. Begin
  21.     MinPoint = MinMove*PriceScale;
  22.     SetStopLoss(1,StopLoss*MinPoint*ContractUnit*BigPointValue,false);                         //设止损30点
  23.     SetProfitTarget(1,TakeProfit*MinPoint*ContractUnit*BigPointValue,false);         //设获利100点
  24.     SetDollarTrailing(TrailingStop*MinPoint*ContractUnit*BigPointValue,false);         //设追踪止损40

  25.     MA5=AverageFC(Close,M5);
  26.     MA20=AverageFC(Close,M20);
  27.     MA30=AverageFC(Close,M30);

  28.     If(MarketPosition ==0 )          // 当前空仓
  29.     {
  30.         BK1=COUNTIF(MA30[0]>MA30[1],3)>2&&CrossOver(MA5,MA20);
  31.         SK1=COUNTIF(MA30[0]<MA30[1],3)>2&&CrossOver(MA20,MA5);

  32.         if (BK1) //多条件
  33.         {
  34.             Buy(Lots,NextOpen,True); //买进单一手
  35.             }else if (SK1) //空条件
  36.         {
  37.             SellShort(Lots,NextOpen,True); //卖出单一手
  38.         }
  39.     }Else If(MarketPosition ==1 )  // 有多仓的情况
  40.     {
  41.         SP1=MA5>MA30&&(MA5-MA30)>40&&CrossOver(MA20,MA5); //多平条件1
  42.         SP2=COUNTIF(CrossOver(MA20,MA5),25)>=2;                         //多平条件2
  43.         If((SP1 || SP2) && PositionProfit>30*MinPoint*ContractUnit*BigPointValue)//在多仓盈利超30点后并且符合多平仓条件
  44.         {
  45.             Sell(0,NextOpen,True);
  46.         }
  47.     }Else If(MarketPosition ==-1 )  // 有空仓的情况
  48.     {
  49.         BP1=MA5<MA30&&(MA30-MA5)>40&&CrossOver(MA5,MA20); //空平条件1
  50.         BP2=COUNTIF(CrossOver(MA5,MA20),25)>=2;         //空平条件2
  51.         If((BP1||BP2)&&PositionProfit>30*MinPoint*ContractUnit*BigPointValue)//在空仓盈利超30点后并且符合空平仓条件
  52.         {
  53.             BuyToCover(Lots,NextOpen,True);
  54.         }
  55.     }
  56. End
复制代码

作者: b8866    时间: 2008-6-22 14:55:21

如何应用在5分钟上时,在15分钟上符合,在60分时上符合,日线上符合上面条件时同样也进单...谢谢
作者: nopain    时间: 2008-6-23 09:31:56

多周期处理,请参考这个贴:
http://www.tradeblazer.net/forum/thread-2433-1-1.html




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2