tb公式想改文华wh8 (文华财经WH8赢智V8.2)

投资者咨询:tb公式想改文华wh8 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-6-15 17:00
 

Params
Numeric Length1(88); //均线
Numeric LEntry(25); //进场M根K线最高点
Numeric LSell(48); //进场n根K线最低点
Numeric StopPCT(0.1); //固定比例止损
Numeric FixXIELV(27); //斜率界定
Numeric FixJump(1);
    Numeric TrailingStart1(10); // 跟踪止损启动设置1
    Numeric TrailingStop1(10);  // 跟踪止损设置1

    Numeric TrailingStart2(100); // 跟踪止损启动设置1
    Numeric TrailingStop2(60);  // 跟踪止损设置1
    
    Numeric KaiD(-20); 
    Numeric KaiK(-40); 

vars
Numeric XIELV; //MA斜率,用于过滤
NumericSeries MA1; //MA均线,用于过滤信号
            
NumericSeries ShortStop;            
NumericSeries LongStop;
NumericSeries EntryHi;              
NumericSeries EntryLo;   
NumericSeries SellHi;
NumericSeries SellLo;               
NumericSeries TradeNum; //记录信号开始天数
Numeric MinPoint;           // 一个最小变动单位,也就是一跳
    Numeric MyEntryPrice;       // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
    Numeric MyExitPrice;        // 平仓价格
    NumericSeries HighestAfterEntry;        // 开仓后出现的最高价
    NumericSeries LowestAfterEntry;         // 开仓后出现的最低价




begin
MinPoint=MinMove*PriceScale;
//Length1均线
MA1=Summation(Close,Length1)/Length1;
PlotNumeric("MA1",MA1);
//入场点,开多和开空点,突破LEntry天最高或最低
EntryHi = Highest(high[1],LEntry);
EntryLo  = Lowest(low[1],LEntry);
//离场点,止盈点,LSell天较高或较低
SellHi=Highest(high[1],LSell);
SellLo= Lowest(low[1],LSell);
if (BarStatus==0 || TradeNum >=3)
{
TradeNum = -1;
}
if(Time!=Time[1] && tradenum>=0)
{
TradeNum = TradeNum[1]+1;
}
    If(BarsSinceentry == 0)
    {
        HighestAfterEntry = Close;
        LowestAfterEntry = Close;
        If(MarketPosition <> 0)
        {
            HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);   // 开仓的Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry
            LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice);     // 开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry
        }
    }else
    {
        HighestAfterEntry = Max(HighestAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
        LowestAfterEntry = Min(LowestAfterEntry,Low);    // 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断
    }
Commentary("MAID:"+Text(((High -MA1[1])*10000/MA1[1])-FixXIELV));
Commentary("MAIK:"+Text(((Low -MA1[1])*10000/MA1[1])-FixXIELV));
if(MarketPosition ==0 and TradeNum<0 )
{
If( high>EntryHi  && (((High -MA1[1])*10000/MA1[1])-FixXIELV) >KaiD )////CrossOver(high,EntryHi)     high>MA1 &&
{
TradeNum = 0;
myEntryPrice = min(high,EntryHi );
myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); 
Buy(0,myEntryPrice+FixJump*MinPoint);
//止损点,两天较低
//LongStop=low[1];
LongStop=Max(Highest(low[1],2),myEntryPrice*(1-StopPCT/100));
}
If( Low<EntryLo  && (((Low -MA1[1])*10000/MA1[1])+FixXIELV)< KaiK) ////    CrossUnder(Low,EntryLo)  low <MA1  &&
{
TradeNum = 0;
myEntryPrice = max(low,EntryLo  );
myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); 
SellShort(0,myEntryPrice-FixJump*MinPoint);
//止损点,两天较高
ShortStop= Min(Lowest(high[1],2),myEntryPrice*(1+StopPCT/100));  
}
}
  
  
If(MarketPosition ==1)
{
if (BarsSinceEntry>0 && Low<LongStop)
{
myExitPrice = max(low,LongStop );
myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice);
Sell(0,myExitPrice-FixJump*MinPoint);
}else if (BarsSinceEntry>0 && Low<SellLo) //(XIELV<0)
{
myExitPrice = max(low,SellLo );
myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice);
Sell(0,myExitPrice-FixJump*MinPoint);
}else if(HighestAfterEntry[1] >= EntryPrice + TrailingStart2*MinPoint)// 第一级跟踪止损的条件表达式
        {
            If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint)
            {
                MyExitPrice = Max(Low,HighestAfterEntry[1] - TrailingStop2*MinPoint);
                myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice);     // 如果该Bar开盘价有跳空触发,则用开盘价代替
                Sell(0,MyExitPrice-FixJump*MinPoint);
            }
        }else if(HighestAfterEntry[1] >= EntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
        {
            If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)
            {
                MyExitPrice = Max(Low,HighestAfterEntry[1] - TrailingStop1*MinPoint);
                myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice);     // 如果该Bar开盘价有跳空触发,则用开盘价代替
                Sell(0,MyExitPrice-FixJump*MinPoint);
            }
        }

}
  
If(MarketPosition ==-1)
{
if(BarsSinceEntry>0 && high>ShortStop)
{
myExitPrice = min(high,ShortStop );
myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice);
BuyToCover(0,myExitPrice+FixJump*MinPoint);
}else if(BarsSinceEntry>0 && high>SellHi) //(XIELV>0)
{
myExitPrice = min(high,SellHi); 
myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice);
BuyToCover(0,myExitPrice+FixJump*MinPoint);
}else if(LowestAfterEntry[1] <= EntryPrice - TrailingStart2*MinPoint)// 第一级跟踪止损的条件表达式
        {
            If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint)
            {
                MyExitPrice = min(high,LowestAfterEntry[1] + TrailingStop2*MinPoint);
                myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice);     // 如果该Bar开盘价有跳空触发,则用开盘价代替
                BuyToCover(0,MyExitPrice+FixJump*MinPoint);
            }
        }else if(LowestAfterEntry[1] <= EntryPrice - TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
        {
            If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint)
            {
                MyExitPrice = min(high,LowestAfterEntry[1] + TrailingStop1*MinPoint);
                myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice);     // 如果该Bar开盘价有跳空触发,则用开盘价代替
                BuyToCover(0,MyExitPrice+FixJump*MinPoint);
            }
        }
}
       
Commentary("TradeNum:"+Text(TradeNum));
Commentary("Time:"+TimeToString(TIME[1]));
end

技术人员回复
日期:2018-6-15 17:08
 WH8是麦语言编写平台,直接改写您的模型是很复杂的

但我们提供MQ软件,兼容了TB的编写方式,您模型进行简单修改,就能在MQ上使用了

您到官网下载mq即可 http://mq.wenhua.com.cn/

代码如下修改

Params
Numeric Length1(88); //均线
Numeric LEntry(25); //进场M根K线最高点
Numeric LSell(48); //进场n根K线最低点
Numeric FixXIELV(27); //斜率界定
Numeric FixJump(1);
Numeric TrailingStart1(10); // 跟踪止损启动设置1
Numeric TrailingStop1(10);  // 跟踪止损设置1
Numeric TrailingStart2(100); // 跟踪止损启动设置1
Numeric TrailingStop2(60);  // 跟踪止损设置1
Numeric KaiD(-20); 
vars
Numeric StopPCT; //固定比例止损
Numeric XIELV; //MA斜率,用于过滤
Numeric KaiK(-40); 
NumericSeries MA1; //MA均线,用于过滤信号
NumericSeries ShortStop;
NumericSeries LongStop;
NumericSeries EntryHi;  
NumericSeries EntryLo;   
NumericSeries SellHi;
NumericSeries SellLo;   
NumericSeries TradeNum;
//记录信号开始天数
Numeric MinPoint;   // 一个最小变动单位,也就是一跳
Numeric MyEntryPrice;   // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
Numeric MyExitPrice;// 平仓价格
NumericSeries HighestAfterEntry;// 开仓后出现的最高价
NumericSeries LowestAfterEntry; // 开仓后出现的最低价
begin
StopPCT=0.1;
MinPoint=MinMove*PriceScale;
MA1=Summation(Close,Length1)/Length1;
PlotNumeric("MA1",MA1);
EntryHi = Highest(high[1],LEntry);
EntryLo  = Lowest(low[1],LEntry);
SellHi=Highest(high[1],LSell);
SellLo= Lowest(low[1],LSell);
if (BarStatus==0 || TradeNum >=3)
{
TradeNum = -1;
}

if(Time!=Time[1] && tradenum>=0)
{
TradeNum = TradeNum[1]+1;
}
If(BarsSinceentry == 0)
{
HighestAfterEntry = Close;
LowestAfterEntry = Close;
If(MarketPosition <> 0)
{
HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);   // 开仓的Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry
LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice); // 开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry
}
}else
{
HighestAfterEntry = Max(HighestAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
LowestAfterEntry = Min(LowestAfterEntry,Low);// 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断
}
Commentary("MAID:"+Text(((High -MA1[1])*10000/MA1[1])-FixXIELV));
Commentary("MAIK:"+Text(((Low -MA1[1])*10000/MA1[1])-FixXIELV));
if(MarketPosition ==0 and TradeNum<0 )
{
If( high>EntryHi  && (((High -MA1[1])*10000/MA1[1])-FixXIELV) >KaiD )////CrossOver(high,EntryHi) high>MA1 &&
{
TradeNum = 0;
myEntryPrice = min(high,EntryHi );
myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); 
Buy(0,myEntryPrice+FixJump*MinPoint);
LongStop=Max(Highest(low[1],2),myEntryPrice*(1-StopPCT/100));
}
If( Low<EntryLo  && (((Low -MA1[1])*10000/MA1[1])+FixXIELV)< KaiK) ////CrossUnder(Low,EntryLo)  low <MA1  &&
{
TradeNum = 0;
myEntryPrice = max(low,EntryLo  );
myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); 
SellShort(0,myEntryPrice-FixJump*MinPoint);
ShortStop= Min(Lowest(high[1],2),myEntryPrice*(1+StopPCT/100));
}
}
If(MarketPosition ==1)
{
if (BarsSinceEntry>0 && Low<LongStop)
{

myExitPrice = max(low,LongStop );

myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice);

Sell(0,myExitPrice-FixJump*MinPoint);


}else if (BarsSinceEntry>0 && Low<SellLo) //(XIELV<0)

{

myExitPrice = max(low,SellLo );

myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice);

Sell(0,myExitPrice-FixJump*MinPoint);


}else if(HighestAfterEntry[1] >= EntryPrice + TrailingStart2*MinPoint)// 第一级跟踪止损的条件表达式
{
If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint)
{
MyExitPrice = Max(Low,HighestAfterEntry[1] - TrailingStop2*MinPoint);
myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 如果该Bar开盘价有跳空触发,则用开盘价代替
Sell(0,MyExitPrice-FixJump*MinPoint);
}
}else if(HighestAfterEntry[1] >= EntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
{
If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)
{
MyExitPrice = Max(Low,HighestAfterEntry[1] - TrailingStop1*MinPoint);
myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 如果该Bar开盘价有跳空触发,则用开盘价代替
Sell(0,MyExitPrice-FixJump*MinPoint);
}
}
}
If(MarketPosition ==-1)
{
if(BarsSinceEntry>0 && high>ShortStop)
{
myExitPrice = min(high,ShortStop );
myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice);
BuyToCover(0,myExitPrice+FixJump*MinPoint);
}else if(BarsSinceEntry>0 && high>SellHi) //(XIELV>0)
{
myExitPrice = min(high,SellHi); 
myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice);
BuyToCover(0,myExitPrice+FixJump*MinPoint);
}else if(LowestAfterEntry[1] <= EntryPrice - TrailingStart2*MinPoint)// 第一级跟踪止损的条件表达式
{
If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint)
{
MyExitPrice = min(high,LowestAfterEntry[1] + TrailingStop2*MinPoint);
myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); // 如果该Bar开盘价有跳空触发,则用开盘价代替
BuyToCover(0,MyExitPrice+FixJump*MinPoint);
}
}else if(LowestAfterEntry[1] <= EntryPrice - TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
{
If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint)
{
MyExitPrice = min(high,LowestAfterEntry[1] + TrailingStop1*MinPoint);
myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); // 如果该Bar开盘价有跳空触发,则用开盘价代替
BuyToCover(0,MyExitPrice+FixJump*MinPoint);
}
}
}
Commentary("TradeNum:"+Text(TradeNum));
Commentary("Time:"+TimeToString(TIME[1]));
end
投资者咨询:tb公式想改文华wh8 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-6-15 17:00
 想改成WH8麦语言的   这个TB的交易方式不是很稳定 我实际运行的时候和回测的时候价格老是不一致


技术人员回复
日期:2018-6-15 17:22
 MQ(wh9)的回测运行机制和wh8一样的,只是模型语言不一样。

回测和运行的一致性,和wh8也是一样的,请放心使用


投资者咨询:tb公式想改文华wh8 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-6-15 17:00
 我加载到MQ里没有交易 

 但是我在TB里是有的
技术人员回复
日期:2018-6-15 19:21
这么试试

Params
Numeric Length1(88); //均线
Numeric LEntry(25); //进场M根K线最高点
Numeric LSell(48); //进场n根K线最低点
Numeric FixXIELV(27); //斜率界定
Numeric FixJump(1);
Numeric TrailingStart1(10); // 跟踪止损启动设置1
Numeric TrailingStop1(10);  // 跟踪止损设置1
Numeric TrailingStart2(100); // 跟踪止损启动设置1
Numeric TrailingStop2(60);  // 跟踪止损设置1
Numeric KaiD(-20); 
vars
Numeric StopPCT; //固定比例止损
Numeric XIELV; //MA斜率,用于过滤
Numeric KaiK(-40); 
NumericSeries MA1; //MA均线,用于过滤信号
NumericSeries ShortStop;
NumericSeries LongStop;
NumericSeries EntryHi;  
NumericSeries EntryLo;   
NumericSeries SellHi;
NumericSeries SellLo;   
NumericSeries TradeNum;
//记录信号开始天数
Numeric MinPoint;   // 一个最小变动单位,也就是一跳
Numeric MyEntryPrice;   // 开仓价格,本例是开仓均价,也可根据需要设置为某次入场的价格
Numeric MyExitPrice;// 平仓价格
NumericSeries HighestAfterEntry;// 开仓后出现的最高价
NumericSeries LowestAfterEntry; // 开仓后出现的最低价

begin
StopPCT=0.1;
MinPoint=MinMove*PriceScale;
MA1=Summation(Close,Length1)/Length1;
PlotNumeric("MA1",MA1);
EntryHi = Highest(high[1],LEntry);
EntryLo  = Lowest(low[1],LEntry);
SellHi=Highest(high[1],LSell);
SellLo= Lowest(low[1],LSell);
if (BarStatus==0 || TradeNum >=3)
{
TradeNum = -1;
}

if(Time!=Time[1])
{
TradeNum = TradeNum[1]+1;
}
If(BarsSinceentry == 0)
{
HighestAfterEntry = Close;
LowestAfterEntry = Close;
If(MarketPosition <> 0)
{
HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice);   // 开仓的Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry
LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice); // 开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry
}
}else
{
HighestAfterEntry = Max(HighestAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
LowestAfterEntry = Min(LowestAfterEntry,Low);// 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断
}
Commentary("MAID:"+Text(((High -MA1[1])*10000/MA1[1])-FixXIELV));
Commentary("MAIK:"+Text(((Low -MA1[1])*10000/MA1[1])-FixXIELV));
if(MarketPosition ==0)
{
If( high>EntryHi  && (((High -MA1[1])*10000/MA1[1])-FixXIELV) >KaiD )////CrossOver(high,EntryHi) high>MA1 &&
{
TradeNum = 0;
myEntryPrice = min(high,EntryHi );
myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); 
Buy(DefaultVol,myEntryPrice+FixJump*MinPoint);
LongStop=Max(Highest(low[1],2),myEntryPrice*(1-StopPCT/100));
}
If( Low<EntryLo  && (((Low -MA1[1])*10000/MA1[1])+FixXIELV)< KaiK) ////CrossUnder(Low,EntryLo)  low <MA1  &&
{
TradeNum = 0;
myEntryPrice = max(low,EntryLo  );
myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); 
SellShort(DefaultVol,myEntryPrice-FixJump*MinPoint);
ShortStop= Min(Lowest(high[1],2),myEntryPrice*(1+StopPCT/100));
}
}
If(MarketPosition ==1)
{
if (BarsSinceEntry>0 && Low<LongStop)
{
myExitPrice = max(low,LongStop );
myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice);
Sell(DefaultVol,myExitPrice-FixJump*MinPoint);
}else if (BarsSinceEntry>0 && Low<SellLo) //(XIELV<0)
{
myExitPrice = max(low,SellLo );
myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice);
Sell(DefaultVol,myExitPrice-FixJump*MinPoint);
}else if(HighestAfterEntry[1] >= EntryPrice + TrailingStart2*MinPoint)// 第一级跟踪止损的条件表达式
{
If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint)
{
MyExitPrice = Max(Low,HighestAfterEntry[1] - TrailingStop2*MinPoint);
myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 如果该Bar开盘价有跳空触发,则用开盘价代替
Sell(DefaultVol,MyExitPrice-FixJump*MinPoint);
}
}else if(HighestAfterEntry[1] >= EntryPrice + TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
{
If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint)
{
MyExitPrice = Max(Low,HighestAfterEntry[1] - TrailingStop1*MinPoint);
myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 如果该Bar开盘价有跳空触发,则用开盘价代替
Sell(DefaultVol,MyExitPrice-FixJump*MinPoint);
}
}
}
If(MarketPosition ==-1)
{
if(BarsSinceEntry>0 && high>ShortStop)
{
myExitPrice = min(high,ShortStop );
myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice);
BuyToCover(DefaultVol,myExitPrice+FixJump*MinPoint);
}else if(BarsSinceEntry>0 && high>SellHi) //(XIELV>0)
{
myExitPrice = min(high,SellHi); 
myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice);
BuyToCover(DefaultVol,myExitPrice+FixJump*MinPoint);
}else if(LowestAfterEntry[1] <= EntryPrice - TrailingStart2*MinPoint)// 第一级跟踪止损的条件表达式
{
If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint)
{
MyExitPrice = min(high,LowestAfterEntry[1] + TrailingStop2*MinPoint);
myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); // 如果该Bar开盘价有跳空触发,则用开盘价代替
BuyToCover(DefaultVol,MyExitPrice+FixJump*MinPoint);
}
}else if(LowestAfterEntry[1] <= EntryPrice - TrailingStart1*MinPoint)// 第一级跟踪止损的条件表达式
{
If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint)
{
MyExitPrice = min(high,LowestAfterEntry[1] + TrailingStop1*MinPoint);
myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); // 如果该Bar开盘价有跳空触发,则用开盘价代替
BuyToCover(DefaultVol,MyExitPrice+FixJump*MinPoint);
}
}
}
Commentary("TradeNum:"+Text(TradeNum));
Commentary("Time:"+TimeToString(TIME[1]));
end