开拓者期货期权程序化系统交易论坛
标题:
请帮忙改写均线顺势交叉模板?
[打印本页]
作者:
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
上面的写法,问题比较多,我重新写过如下:
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
Numeric MinPoint;
NumericSeries MA5;
NumericSeries MA20;
NumericSeries MA30;
Bool BK1;
Bool SK1;
Bool BP1;
Bool BP2;
Bool SP1;
Bool SP2;
Begin
MinPoint = MinMove*PriceScale;
SetStopLoss(1,StopLoss*MinPoint*ContractUnit*BigPointValue,false); //设止损30点
SetProfitTarget(1,TakeProfit*MinPoint*ContractUnit*BigPointValue,false); //设获利100点
SetDollarTrailing(TrailingStop*MinPoint*ContractUnit*BigPointValue,false); //设追踪止损40
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,NextOpen,True); //买进单一手
}else if (SK1) //空条件
{
SellShort(Lots,NextOpen,True); //卖出单一手
}
}Else If(MarketPosition ==1 ) // 有多仓的情况
{
SP1=MA5>MA30&&(MA5-MA30)>40&&CrossOver(MA20,MA5); //多平条件1
SP2=COUNTIF(CrossOver(MA20,MA5),25)>=2; //多平条件2
If((SP1 || SP2) && PositionProfit>30*MinPoint*ContractUnit*BigPointValue)//在多仓盈利超30点后并且符合多平仓条件
{
Sell(0,NextOpen,True);
}
}Else If(MarketPosition ==-1 ) // 有空仓的情况
{
BP1=MA5<MA30&&(MA30-MA5)>40&&CrossOver(MA5,MA20); //空平条件1
BP2=COUNTIF(CrossOver(MA5,MA20),25)>=2; //空平条件2
If((BP1||BP2)&&PositionProfit>30*MinPoint*ContractUnit*BigPointValue)//在空仓盈利超30点后并且符合空平仓条件
{
BuyToCover(Lots,NextOpen,True);
}
}
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