我将免费撰写一份顾问报告 - 页 149

 
DDM77:
在机器人经过测试后,有可能出现正式的订单

说得很好 :)

 
Александр:

一些变化

究竟改变了什么?

 

各位同事,大家好。

该主题是否仍然相关?有没有准备免费开发机器人的赞助者?

我需要一个擅长.mq4编码的助手。

我自己是个程序员,但我对mq4不是很在行。 有些问题,我要么不知道怎么描述,要么就不知道怎么解决。

我有一个简单的剥头皮策略(M15-M30)和最初编写的机器人。它需要改进。

我不会给我网站的链接,这不会被视为我的广告。

RVI 50

EMA 9

EMA 100

多头头寸的进入条件。

EMA9从下往上穿过EMA100,RVI也必须从下往上穿过零线或高于零线。如果这些条件得到满足,我们就建立一个买入头寸。 我们在最近的最低点以下2-3个点设置止损止盈 比止损高1.5-2倍。

空头头寸的进入条件。

EMA9从上方往下穿过EMA100,而RVI指标也必须从上方往下穿过零线或低于零线。如果这些条件得到满足,我们就建立一个卖出头寸。止损 放在最接近的最大值之上。止盈 比止损高1.5-2倍。


我已经写了一个原始的机器人,但它正在失去,因为我必须修复一些不工作的东西,另外,也许有人有一些想法,如何过滤掉错误的信号?(当然他们会这样做)...

什么东西不工作,我们必须解决它。

1.止损和止盈分别被设置为固定的100和200,这些水平是不够的。我们应该从最后X个 柱子的蜡烛图集中计算出最低/最高 止损(将X 个柱子设为输入参数),并从中获取利润。 我自己不知道如何做。最重要的一点,因为机器人的失败正是因为在止损点上收盘,尽管信号是正确的,利润会更大。

2.机器人,出于某种原因,(在测试器中)在某些点位内,在同一个柱 子上打开了几个订单,即使它正在检查在同一个柱子上打开一个订单(从这个论坛借用),但它没有工作。我们必须修改检查,看看它为什么不工作

3.当BU达到一定水平时,完成添加尾随止损(机器人的传入参数),例如,计算TP的1/2(也可以在参数中指定BU系数,例如,从0.3到0.7)。在机器人中描述了单独的尾随(代码取自该论坛),但它没有考虑到BU。此外,由于某些原因,它在策略测试器中不起作用,我需要了解原因。

4.我想增加资金管理,但我不知道怎么做。例如,禁止在一个方向上打开超过5个订单,如果有活跃的。或者在设置账户余额/权益 时禁止交易。

5.马廷戈尔。对信号进行过滤。(可选)。


这就是全部。机器人文件已经准备好,如果有兴趣合作,可以提交给个人。如果你有兴趣,我准备在私人信息中分享交易机器人的文件,如果有感兴趣的交易者。我自己也会完成,然后仍然只有1分。

 

我已经解决了第1项,我已经找到了如何通过iLowest/iHighest来根据条形历史计算价格的方法))在过去半年的历史中,盈利指标略有增加)在整个历史中是损失(

我还是不明白第2点。

我开始处理追踪,也许我会自己 "赢得 "它)盈利能力应该增长一些,因为有些交易有很大的收益,但价格就是达不到,并通过停止来关闭它,尽管我可以获利。

 

关于第二点。

datetime current, last=0;
int shift=1;

void OnTick()
   {
   current=iTime(symbol,frame,shift);
   //ограничение на торговлю вне начала бара
   if(last==current) return;
   last=current;

   }

关于第三点。

//трейлинг рыночных ордеров, стоплосс держится на расстоянии Distance от самой экстремальной тени из последних History баров 
int DoTrailOrder(int ePosition, int eMagicNumber, double eDistance, int eHistory, string eSymbol, int eTimeFrame)
   {
   if(!OrderSelect(ePosition,SELECT_BY_POS,MODE_TRADES)) return(1);
   int eType=OrderType();
   if(eType!=OP_BUY && eType!=OP_SELL) return(0);
   if(OrderMagicNumber()!=eMagicNumber) return(0);
   if(OrderSymbol()!=eSymbol) return(0);
   //наблюдаем начиная с бара следующим за баром открытия
   if(iBarShift(eSymbol,eTimeFrame,OrderOpenTime())==0) return(0);
   int eDigits=(int)MarketInfo(eSymbol,MODE_DIGITS);
   double ePoint=MarketInfo(eSymbol,MODE_POINT);
   double eSpread=MarketInfo(eSymbol,MODE_SPREAD);
   double eExtremum;
   if(eType==OP_BUY)
      {
      //стоп устанавливается на расстоянии eDistance от самой низкой тени бара из истории eHistory
      eExtremum=iLow(eSymbol,eTimeFrame,iLowest(eSymbol,eTimeFrame,MODE_LOW,eHistory,1));
      //расстояние от минимума до StopLoss должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderStopLoss(),eDigits)<=eDistance*ePoint) return(0);
      //расстояние от минимума до цены открытия должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderOpenPrice(),eDigits)<=eDistance*ePoint) return(0);
      //новый стоп должен быть не ближе к текущей цене, чем на два спреда
      if(NormalizeDouble(MarketInfo(eSymbol,MODE_BID)+eDistance*ePoint-eExtremum,eDigits)<=2*eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum-eDistance*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrBlue)) return(-1);
      }
   if(eType==OP_SELL)
      {
      //стоп устанавливается на расстоянии eDistance от самой высокой тени бара из истории eHistory
      eExtremum=iHigh(eSymbol,eTimeFrame,iHighest(eSymbol,eTimeFrame,MODE_HIGH,eHistory,1));
      if(NormalizeDouble(OrderStopLoss()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint && OrderStopLoss()!=0) return(0);
      if(NormalizeDouble(OrderOpenPrice()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint) return(0);
      //один спред между Ask и Bid сократился
      if(NormalizeDouble(eExtremum+eDistance*ePoint-MarketInfo(eSymbol,MODE_ASK),eDigits)<=eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum+(eDistance+eSpread)*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrRed)) return(-1);
      }
   return(0);
   }
 

跟踪止损可能会增加预期,但并不能提高盈利能力。在嘈杂的市场中会有表现不佳的情况,价格会打掉一个新的跟踪止损,而如果没有这个止损,就会有更多的利润。

最好是有意地考虑关闭贸易。你在寻找开盘的信号,那么为什么要把收盘抛给套利呢?
 

谢谢你对第2,3点的提示。 我将进行测试。

至于关闭,当然可以在相反的信号触发时关闭,我需要考虑......什么会带来更多的效果。

我想在它达到一定水平时跟踪一些东西。这将是一个缺点,但我也不想有一个大的缩减。)

谢谢

 

迪米特里,关于跟踪 - 这是已经被许多人不止一次测试过的信息。上面的尾部代码可能是所有代码中最好的。但它并非没有这个缺点。

试试吧,一切都必须尝试。

 
Ivan:

究竟改变了什么?

我以前在什么地方给过它。这里有更多。

附加的文件:
 
Дмитрий Хлыстов:

谢谢你对第2,3点的提示。 我将进行测试。

至于关闭,当然可以在相反的信号触发时关闭,我需要考虑......什么会带来更多的效果。

我想在它达到一定水平时跟踪一些东西。这将是一个缺点,但我也不想有一个大的缩减。)

谢谢

市场不以点数为单位,也就是说,它不以点数为基础。它从一个级别移动到另一个级别。距离最好用趋势时间来衡量。也许是以点计算,但不是以点计算。