欢迎光临散文网 会员登陆 & 注册

期货量化交易软件:跟踪止损和退出市场的模式

2023-08-16 17:26 作者:bili_45793681098  | 我要投稿

简介

订单修改/关闭算法的开发人员面临无止境的痛苦 - 如何比较通过不同方法获得的结果?检查机制众所周知 - 它就是策略测试程序。但如何使 EA 同等地处理建立/关闭订单?本文将介绍一个能够重复建立大量订单的工具,让我们能够维持一个在数学上保持正确的平台,以比较针对跟踪止损和退出市场的不同算法的结果。

如果你正在调试一个应独立计算进入市场、跟踪止损和退出市场的时间的复杂 EA,则实际上几乎不可能获得一个可相互比较的可重复模式。假设存在一种建立订单的信号相当长的情况。在理想情况下,将建立此订单。然后,如果选择的方向正确并且价格在预测方向上变动,跟踪止损将开始工作。根据价格波动,设置过于接近的止损会导致过早关闭可能会增加利润的订单。如果此时建仓信号仍然有效,EA 将关闭新的订单。因而,赫兹量化软件需要将“正确”订单的结果与在提前关闭之后建立的一些其他订单的结果进行比较。为了避免这种情况,建议如下。

编辑切换为居中


问题说明

  1. 订单建立/关闭点模式已在图表中进行标记。

  2. 建立/关闭时间和交易方向(买入/卖出)已保存在文件中。

  3. 已创建用于读取准备的文件并严格执行其命令的 Expert Advisor。

必须在市场反转时设置建立点 - 它们在历史记录中非常明显,这一点很好。然而,不应在价格达到反向的反转点之时而应在之后选择关闭点。不要忘记赫兹量化软件的任务是优化跟踪和退出市场,因此我们应让任何算法完成其操作,即使算法不正确。如果仍然无法修复收益,我们将看到亏损,这将成为我们需要重新设计算法的信号。


编辑切换为居中


请看上图。紫线显示理想情况下的正确进场和出场。它可用于计算我们希望/能够获得的最大收益。然而,考虑到跟踪测试目的,赫兹量化软件将使用与蓝线类似的线条。它显示实际交易的特点:进场有些延迟(例如,我们正在等待反转确认)以及在保本位附近进行关闭(例如,我们担心会出现强势反转,而如果这样的话,我们会损失惨重)。

在“沿蓝线”进行的交易中,在跟踪之后,有三个可能会触发止损的点:

  1. 与当前价格距离最近时触发积极跟踪。

  2. 通常,触发“耐心”跟踪。

  3. 触发理想跟踪,使收益最大化。

除此之外,点 4 周围的区域可能会错误地触发过于急躁的跟踪。

既然我们知道如何“标记”理想区域,接下来唯一的事情就是使其尽可能的妥当。



标记工具

为了便于使用理想线条对图表标记,我们来准备一组脚本。两个脚本 TL_Buy 和 TL_Sell 将分别针对买入和卖出操作创建标记线条。脚本 TL_Write 将查看所有创建的线条并将它们的特点保存在一个文件中以便 Expert Advisor TL_Trade 使用。另一个脚本 TL_Read 将能够读取创建的文件并基于此文件重组所有线条。。这对更正可用线条、添加一些新的线条或者删除现有线条可能很有帮助。

为了读取/写入脚本能够使用它们的线条,我们将根据一定的规则命名所有线条:

  1. 所有理想线条的名称以同一前缀 (TL_) 开头。你以后可以使用此前缀来选择和删除线条;

  2. 前缀后面跟的是一个表示操作代码的字符:B-买入,S-卖出;

  3. 在线条名称中,操作代码后面跟的是线条之间相互区分的线条编号。

因此,赫兹量化软件应在图表中获得具有例如以下名称的线条:TL_B1、TL_B2、TL_S3 等。 只需将绘制线条的脚本拖放在图表上,将在拖放点上出现相应的线条。你可以移动它的端点,以便它们标记交易所需的理想“蓝线”。读取/写入脚本在连接到图表后,会要求提供要保存和读取的文件名。这样,我们可以轻松地使用不同的线条集,例如针对不同的货币对。 这些脚本的代码相当透明,而且提供所有必要的注释,因此我冒昧地跳过它们的算法说明 - 你可以从它们的代码中看到算法。

/**************************************************************** PATTERN TRADING: TL_Buy - creation of a new, pattern buying line Copyright © 2006-2008, Sergey Kravchuk. http://forextools.com.ua *****************************************************************/ #include <WinUser32.mqh> #define _prefix_ "TL_" int start() {  int MaxNo=0,i,No;    if(WindowOnDropped()!=0) { MessageBox("Script should be dropped in the main window","ERROR", IDOK + MB_ICONERROR); return(1); }  // find the maximum suffix number for all lines  for(i=0;i<ObjectsTotal();i++)  {    if(StringFind(ObjectName(i),_prefix_)==0)    {      No=StrToInteger(StringSubstr(ObjectName(i),StringLen(_prefix_)+1)); // select the line number      if(MaxNo<No) MaxNo=No; // store it, if it is larger    }  }    datetime t0=WindowTimeOnDropped(); double p0=WindowPriceOnDropped(); // find the coordinates of the script dropping point  int width = 5*Period()*60;                             // width of the created line in bars converted into time units  double height = 20*MarketInfo(Symbol(),MODE_TICKSIZE); // height of the created line in ticks converted into price units    string LineName = _prefix_+"B"+(MaxNo+1);  // create a name for a new line  ObjectCreate(LineName,OBJ_TREND,0,t0-width,p0-height, t0+width,p0+height); // create a line  ObjectSet(LineName,OBJPROP_RAY,False); // make it a section, not a ray  ObjectSet(LineName,OBJPROP_WIDTH,2);   // set its width  ObjectSet(LineName,OBJPROP_COLOR,Blue); // set its color }


/**************************************************************** PATTERN TRADING: TL_Sell - creation of a new, pattern selling line Copyright © 2006-2008, Sergey Kravchuk. http://forextools.com.ua *****************************************************************/ #include <WinUser32.mqh> #define _prefix_ "TL_" int start() {  int MaxNo=0,i,No;    if(WindowOnDropped()!=0) { MessageBox("Script should be dropped in the main window","ERROR", IDOK + MB_ICONERROR); return(1); }  // find the maximum suffix number for all lines  for(i=0;i<ObjectsTotal();i++)  {    if(StringFind(ObjectName(i),_prefix_)==0)    {      No=StrToInteger(StringSubstr(ObjectName(i),StringLen(_prefix_)+1)); // select the line number      if(MaxNo<No) MaxNo=No; // store it, if it is larger    }  }    datetime t0=WindowTimeOnDropped(); double p0=WindowPriceOnDropped(); // find the coordinates of the script dropping point  int width = 5*Period()*60;                             // width of the created line in bars converted into time units  double height = 20*MarketInfo(Symbol(),MODE_TICKSIZE); // height of the created line in ticks converted into price units    string LineName = _prefix_+"S"+(MaxNo+1);  // create a name for a new line  ObjectCreate(LineName,OBJ_TREND,0,t0-width,p0+height, t0+width,p0-height); // create a line  ObjectSet(LineName,OBJPROP_RAY,False); // make it a section, not a ray  ObjectSet(LineName,OBJPROP_WIDTH,2);   // set its width  ObjectSet(LineName,OBJPROP_COLOR,Red); // set its color }


/**************************************************************** PATTERN TRADING: TL_Write - saving the coordinates of pattern lines in a file Copyright © 2006-2008, Sergey Kravchuk. http://forextools.com.ua *****************************************************************/ #include <WinUser32.mqh> #define _prefix_ "TL_" #property show_inputs extern string FileNameForWrite = "TL_DATA.TXT"; int start() {  int LinesCNT=0,i; string Operation; double p; datetime t;    int fh=FileOpen(FileNameForWrite,FILE_CSV|FILE_WRITE,';');  // look through all lines created and save the opening commands for the EA from them  for(i=0;i<ObjectsTotal();i++)  {    if(StringFind(ObjectName(i),_prefix_)==0) // our line    {      string LineName = ObjectName(i);        datetime t1=ObjectGet(LineName,OBJPROP_TIME1);      datetime t2=ObjectGet(LineName,OBJPROP_TIME2);      double p1=ObjectGet(LineName,OBJPROP_PRICE1);      double p2=ObjectGet(LineName,OBJPROP_PRICE2);      LinesCNT++; // increase the counter for producing the final message            Operation = StringSubstr(ObjectName(i),StringLen(_prefix_),1);            // prices are necessary only for restoring the line in the chart      FileWrite(fh,Operation,TimeToStr(t1),DoubleToStr(p1,Digits),TimeToStr(t2),DoubleToStr(p2,Digits));    }  }    FileClose(fh);    MessageBox("Stored sections "+(LinesCNT)+" pcs.","Done", IDOK + MB_ICONINFORMATION); }


期货量化交易软件:跟踪止损和退出市场的模式的评论 (共 条)

分享到微博请遵守国家法律