投资者咨询:请问MQ算法编写 (文华财经wh9)
来源:文华财经 日期:2018-8-13 22:06
老师好!
Params
Numeric Length(30); //定义均线的周期数
Vars
Numeric Lost(2); //定义止损参数
Numeric Win(2); //定义止盈参数
Numeric Time_Exit(151450); //定义尾盘清仓时间
Numeric MinP; //定义合约最小变动价位
NumericSeries Ma1; //均线
Begin
MinP = MinPrice;
Ma1 = Ma(New,Length);
//------------------------------------------------------开仓条件-------------------------------------------------------
If(MarketPosition == 0)
{
If(Ref(Ma1,1) > Ref(Ma1,2) && Ma1 > Ref(Ma1,1) && Time < Time_Exit / 1000000) //均线连续两周期上升,则入场做多
Buy;
If(Ref(Ma1,1) < Ref(Ma1,2) && Ma1 < Ref(Ma1,1) && Time < Time_Exit / 1000000) //均线连续两周期下降,则入场做空
SellShort;
}
//-----------------------------------------------------平仓条件-----------------------------------------------------------
Else If(MarketPosition == 1 )
{
If( Time >= Time_Exit / 1000000) //多头尾盘平仓
Sell;
Else If( New > BKPrice + Win * MinP) // 多头止盈
Sell;
Else If( New < BKPrice - Lost * MinP) //多头止损
Sell;
}
Else If(MarketPosition == -1 )
{
If( Time >= Time_Exit / 1000000) //空头尾盘平仓
BuyToCover;
Else If( New < SKPrice - Win * MinP) // 空头止盈
BuyToCover;
Else If( New > SKPrice + Lost * MinP) //空头止损
BuyToCover;
}
1、Buy; Buy的功能应该是先平空仓,然后开多仓是吧。 我希望是这样的: 当条件触发Buy时,按A--买1价平空仓(而非卖1价),并且B--也按买1价开多仓(非卖1价);信号发出以后,如果10根线或5秒之内,如果都已成交,然后执行下一个指令。如果在10跟线或5秒之内,上面二个(或者至少一个)没有成交,如A-买1价平空仓未成交(或部分未成交)--按现价(即卖1价)执行清仓交易;如B-买1价开多仓未成交或部分未成交--那么取消这个买1价开多的指令(即不再开仓,如果部分已成交那么已开的保留,未成交的取消);完成这二方面的步骤以后,然后再等待下一个指令的到来。
2、同理,SellShort的功能应该是先平多仓,然后开空仓是吧。 我也希望是这样的: 当条件触发SellSHORT时,按C--卖1价平多仓(而非买1价),并且D--也按卖1价开空仓(非买1价);信号发出以后,如果10根线或5秒之内,如果都已成交,然后执行下一个指令。如果在10跟线或5秒之内,上面二个(或者至少一个)没有成交,如C-卖1价平多仓未成交(或部分未成交)--按现价(即买1价)执行清仓交易;如D-卖1价开空仓未成交或部分未成交--那么取消这个卖1价开空的指令(即不再开仓,如果部分已成交那么已开的保留,未成交的取消);完成这二方面的步骤以后,然后再等待下一个指令的到来。
不知上面二点是否已表达清楚,请老师以上面的TICK案例程序为基础,帮忙写一下如何实现的语句,谢谢!
技术人员回复
日期:2018-8-13 22:12
MQ改写较复杂,分析后预计本周三之前给您回复
投资者咨询:请问MQ算法编写 (文华财经wh9)
来源:文华财经 日期:2018-8-13 22:06
技术人员回复
日期:2018-8-15 14:39
算法语句编写较复杂需要时间,预计今晚22:00之前给您回复
投资者咨询:请问MQ算法编写 (文华财经wh9)
来源:文华财经 日期:2018-8-13 22:06
好的,谢谢老师!
技术人员回复
日期:2018-8-15 20:59
Params
Numeric Length(30); //定义均线的周期数
Vars
Numeric Lost(2); //定义止损参数
Numeric Win(2); //定义止盈参数
Numeric Time_Exit(151450); //定义尾盘清仓时间
Numeric MinP; //定义合约最小变动价位
NumericSeries Ma1; //均线
Numeric SK1;
Numeric BK1;
Numeric SK2;
Numeric BK2;
Setting
SignalNoTrading:1;//模型发出信号不委托
Begin
MinP = MinPrice;
Ma1 = Ma(New,Length);
//------------------------------------------------------开仓条件-------------------------------------------------------
If(MarketPosition == 0)
{
If(Ref(Ma1,1) > Ref(Ma1,2) && Ma1 > Ref(Ma1,1) && Time < Time_Exit / 1000000) //均线连续两周期上升,则入场做多
Buy;
If(Ref(Ma1,1) < Ref(Ma1,2) && Ma1 < Ref(Ma1,1) && Time < Time_Exit / 1000000) //均线连续两周期下降,则入场做空
SellShort;
}
//-----------------------------------------------------平仓条件-----------------------------------------------------------
Else If(MarketPosition == 1 )
{
If( Time >= Time_Exit / 1000000) //多头尾盘平仓
Sell;
Else If( New > BKPrice + Win * MinP) // 多头止盈
Sell;
Else If( New < BKPrice - Lost * MinP) //多头止损
Sell;
}
Else If(MarketPosition == -1 )
{
If( Time >= Time_Exit / 1000000) //空头尾盘平仓
BuyToCover;
Else If( New < SKPrice - Win * MinP) // 空头止盈
BuyToCover;
Else If( New > SKPrice + Lost * MinP) //空头止损
BuyToCover;
}
//Buy信号处理部分
If(F_CurrentSig == Sig_Buy &&GetGlobalVar(0)==0)
{
BK1=A_SendOrder(Enum_Sell,Enum_Exit,1,Price("Bid1"));
SK1=A_SendOrder(Enum_Buy,Enum_Entry,1,Price("Bid1"));
SetGlobalVar(0,1);
SetGlobalVar2("BuyTimeCoin",CurrentTime);
}
if(GetGlobalVar(0)==0&& TimeDiff(GetGlobalVar2("BuyTimeCoin"),CurrentTime) > 5&& F_OrderStatus(GetGlobalVar2("SK1")) == Enum_Filled&& F_OrderStatus(GetGlobalVar2("BK1")) == Enum_Filled)
{
SetGlobalVar(0,0);
}
if(GetGlobalVar(0)==0&&TimeDiff(GetGlobalVar2("BuyTimeCoin"),CurrentTime) > 5&& F_OrderStatus(GetGlobalVar2("SK1")) == 0)
{
F_DeleteOrder();
SetGlobalVar(1,1);
}
If(GetGlobalVar(1)==1)
{
A_SendOrder(Enum_Sell,Enum_Exit,F_BuyRemainPosition(),Price("FallLimit"));
SetGlobalVar(0,0);
}
//SellShort信号处理部分
If(F_CurrentSig == Sig_SellShort &&GetGlobalVar(3)==0)
{
BK2=A_SendOrder(Enum_Buy,Enum_Exit,1,Price("ASK1"));
SK2=A_SendOrder(Enum_Sell,Enum_Entry,1,Price("ASK1"));
SetGlobalVar(3,1);
SetGlobalVar2("SellTimeCoin",CurrentTime);
}
if(GetGlobalVar(3)==0&& TimeDiff(GetGlobalVar2("SellTimeCoin"),CurrentTime) > 5&& F_OrderStatus(GetGlobalVar2("SK2")) == Enum_Filled&& F_OrderStatus(GetGlobalVar2("BK2")) == Enum_Filled)
{
SetGlobalVar(3,0);
}
if(GetGlobalVar(3)==0&&TimeDiff(GetGlobalVar2("SellTimeCoin"),CurrentTime) > 5&& F_OrderStatus(GetGlobalVar2("SK2")) == 0)
{
F_DeleteOrder();
SetGlobalVar(4,1);
}
If(GetGlobalVar(4)==1)
{
A_SendOrder(Enum_buy,Enum_Exit,F_SellRemainPosition(),Price("RiseLimit"));
SetGlobalVar(3,0);
}
End
投资者咨询:请问MQ算法编写 (文华财经wh9)
来源:文华财经 日期:2018-8-13 22:06
谢谢老师!您辛苦啦!
Vars
NumericSeries Ma_bid;
NumericSeries Ma_ask;
NumericSeries Ma_Up; //定义文华通道线上轨
NumericSeries Ma_Down; //定义文华通道线下轨
Numeric SK1;
Numeric BK1;
Numeric SK2;
Numeric BK2;
Setting
SignalNoTrading:1;//模型发出信号不委托
Begin
Ma_ask = (Ask1 * AskVol1 + Ask2 * AskVol2 + Ask3 * AskVol3 + Ask4 * AskVol4 + Ask5 * AskVol5) / (AskVol1 + AskVol2 + AskVol3 + AskVol4 + AskVol5);
Ma_bid = (Bid1 * BidVol1 + Bid2 * BidVol2 + Bid3 * BidVol3 + Bid4 * BidVol4 + Bid5 * BidVol) / (BidVol1 + BidVol2 + BidVol3 + BidVol4 + BidVol5);
Ma_Up = Ma(Ma_ask,30);
Ma_Down = Ma(Ma_bid,30);
If(Cross(New,Ma_Up)) //最新价上穿文华通道线上轨,入场做多
{
Buy;
}
Else If(CrossDown(New,Ma_Down)) //最新价下穿文华通道线下轨,入场做空
{
SellShort;
}
//文华通道线
DrawColorLine(Rising(5), Ma_Up, Red, Green, Linethick1);
DrawColorLine(Rising(5), Ma_Down, Red, Green, Linethick1);
//Buy信号处理部分
If(F_CurrentSig == Sig_Buy &&GetGlobalVar(0)==0)
{
BK1=A_SendOrder(Enum_Sell,Enum_Exit,1,Price("Bid1"));
SK1=A_SendOrder(Enum_Buy,Enum_Entry,1,Price("Bid1"));
SetGlobalVar(0,1);
SetGlobalVar2("BuyTimeCoin",CurrentTime);
}
if(GetGlobalVar(0)==0&& TimeDiff(GetGlobalVar2("BuyTimeCoin"),CurrentTime) > 5&& F_OrderStatus(GetGlobalVar2("SK1")) == Enum_Filled&& F_OrderStatus(GetGlobalVar2("BK1")) == Enum_Filled)
{
SetGlobalVar(0,0);
}
if(GetGlobalVar(0)==0&&TimeDiff(GetGlobalVar2("BuyTimeCoin"),CurrentTime) > 5&& F_OrderStatus(GetGlobalVar2("SK1")) == 0)
{
F_DeleteOrder();
SetGlobalVar(1,1);
}
If(GetGlobalVar(1)==1)
{
A_SendOrder(Enum_Sell,Enum_Exit,F_BuyRemainPosition(),Price("FallLimit"));
SetGlobalVar(0,0);
}
//SellShort信号处理部分
If(F_CurrentSig == Sig_SellShort &&GetGlobalVar(3)==0)
{
BK2=A_SendOrder(Enum_Buy,Enum_Exit,1,Price("ASK1"));
SK2=A_SendOrder(Enum_Sell,Enum_Entry,1,Price("ASK1"));
SetGlobalVar(3,1);
SetGlobalVar2("SellTimeCoin",CurrentTime);
}
if(GetGlobalVar(3)==0&& TimeDiff(GetGlobalVar2("SellTimeCoin"),CurrentTime) > 5&& F_OrderStatus(GetGlobalVar2("SK2")) == Enum_Filled&& F_OrderStatus(GetGlobalVar2("BK2")) == Enum_Filled)
{
SetGlobalVar(3,0);
}
if(GetGlobalVar(3)==0&&TimeDiff(GetGlobalVar2("SellTimeCoin"),CurrentTime) > 5&& F_OrderStatus(GetGlobalVar2("SK2")) == 0)
{
F_DeleteOrder();
SetGlobalVar(4,1);
}
If(GetGlobalVar(4)==1)
{
A_SendOrder(Enum_buy,Enum_Exit,F_SellRemainPosition(),Price("RiseLimit"));
SetGlobalVar(3,0);
}
End
技术人员回复
日期:2018-8-16 8:17
参考2楼添加的信号处理部分加到7楼部分中就可以不需要特殊调整的
投资者咨询:请问MQ算法编写 (文华财经wh9)
来源:文华财经 日期:2018-8-13 22:06
技术人员回复
日期:2018-8-16 9:45
分析后回复