复盘软件--测试模式下的面板开单

 

引言

正常情况下交易者编写的面板EA在测试模式下是不可用的帮助文档里也有相关的描述,但是我们发现有很多人传出来的面板是支持测试模式开单的,出于好奇我搜了一下国外交易者发布的相关文章,解决了这个问题,现向中文用户分享一下。


言归正传,用正常的面板EA在测试模式下运行,你会发现如下规律:

1.按钮可以对鼠标的点击产生按下和弹起的反应,但是按下后并没有执行相应的代码;

2.很显然写在OnTick()里面的代码会被明确执行。

你可以去查一下帮助文档,测试模式里OnChartEvent()是不可用的01

再来分析一下局面1.OnChartEvent()被屏蔽了;2.但是按钮状态并没有被屏蔽;3同时OnTick()又能实现开单。

我们要通过按钮实现订单操作又不能通过OnChartEvent(),但是可以借用OnTick()。所以我们自然而然想到在OnTick()里面获取按钮状态实现订单操作,如此则可实现OnChartEvent()的借尸还魂。

然后,我们编一个函数来模拟OnChartEvent()供OnTick()调用,这个函数应该实现如下功能:

1.获取并处理按钮状态;

2.根据对应功能的按钮的状态执行相应订单操作。


//<<<<<<<<<<<<<<<<<<<<<<<<<<<<模拟事件函数<<<<<<<<<<<<<<<<<<<<<<<<<<<<

void EmulatedChartEvent()

{

//单仓买入按钮状态

bool singlbuy_state=ObjectGet("button1",OBJPROP_STATE);

//单仓卖出按钮状态

bool singlsell_state=ObjectGet("button2",OBJPROP_STATE);

//双单买入按钮状态

bool doublebuy_state=ObjectGet("button3",OBJPROP_STATE);

//双单卖出按钮状态

bool doublesell_state=ObjectGet("button4",OBJPROP_STATE);

//一键清仓按钮状态

bool closeall_state=ObjectGet("button5",OBJPROP_STATE);

//订单修改按钮状态

bool ordermodify_state=ObjectGet("button6",OBJPROP_STATE);

//截图保存按钮状态

bool sreenshoot_state=ObjectGet("button7",OBJPROP_STATE);

//显示仓单按钮状态

bool showorder_state=ObjectGet("button8",OBJPROP_STATE);

//止损按钮纵坐标

int  stoplossbutton_top=ObjectGet("button9",OBJPROP_YDISTANCE);

//止损按钮按钮状态

bool stoplossbutton_state=ObjectGet("button9",OBJPROP_STATE);

//止盈按钮纵坐标

int  takeprofitbutton_top=ObjectGet("button10",OBJPROP_YDISTANCE);

//止盈按钮按钮状态

bool takeprofitbutton_state=ObjectGet("button10",OBJPROP_STATE);


//如果买入按钮被按下,则执行买入操作并将买入对应的按钮状态还原

   if(singlbuy_state==true)

   {

   ....

   OrderSend...

   ObjectSet("button1",OBJPROP_STATE,false);

   }

......

}

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>模拟事件函数>>>>>>>>>>>>>>>>>>>>>>>>>>>>


最后在OnTick()里面调用就好:

void OnTick()

{

   if(IsTesting()==true)

   {

   //模拟图表事件函数

   EmulatedChartEvent();

   }else

   {

   return;

   }


}

本人最终实现的效果截图:

02


结论

结论请看官自己总结。
 


附加的文件:
yvEA.ex4  143 kb
 
ObjectGet()可以换成ObjectGetInteger()...
 
非常感谢您的分享
 
lisa1505736068 #:
非常感谢您的分享
🙏🙏🙏