新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 155

 
Alexander Antoshkin:

你能......?

计算一下换一个灯泡需要多少个霍比特人?

寄给自由职业者?写 "在那里读它"?

我如何在历史上找到关闭系列订单的坐标,就像例子中那样(我打算在这一点上画一条线)。

我已经在这个主题的151页上问过这个问题,但没有找到解决办法 ... https://www.mql5.com/ru/forum/160683/page151



你应该在历史上寻找一系列具有相同收盘条的订单。这个酒吧的时间将是你正在寻找的。
 
Alexander Antoshkin:

你能......?

计算一下换一个灯泡需要多少个霍比特人?

寄给自由职业者?写 "在那里读它"?

我们可以做很多事情:)

霍比特人的问题没有一个放之四海而皆准的解决方案......。

如果你不明白,我的回答来自维塔利-波斯托拉奇 引用的同一视频。

但说真的。

我如何在历史上找到一个交易关闭一系列订单的坐标,就像例子中那样(我打算在这时画一条线)。

我已经在这个主题的151页上问过这个问题,但没有找到解决办法。https://www.mql5.com/ru/forum/160683/page151

我没有读过该链接的分支。但它会是这样的。

确定几个订单(一种或不同类型)在X点内的收盘事实(需要X范围,因为在现实中,所有的交易可能不会以相同的价格收盘),确定平均收盘价,并通过它画一条线。

 
Artyom Trishkin:
搜索历史上一系列具有相同收盘条的订单。这个酒吧的时间将是你正在寻找的。
这和我的解决方法是一样的问题:根据ping和订单的数量,同一蜡烛上的所有交易可能不会关闭...
 
Alexey Kozitsyn:
这和我的解决方法是一样的问题:根据平移和订单的数量,同一蜡烛上的所有交易可能不会关闭...
对于M1,我同意。对其他人来说,这是不可能的。除非平仓单在蜡烛开盘前出现。将有两套订单。取两个相邻的最后一个。
 
Artyom Trishkin:
对于M1,我同意。对其他人来说,这是不可能的。如果只是在蜡烛图开盘前收到了平仓的指令。将有两套订单。取两个相邻的最后一个。

这里没有给出什么数据来决定:几个包可能在同一根蜡烛上被关闭(如果你检查,比如说,小时或日蜡烛图)。

 
Vitalie Postolache:


我想要平行的红线,但我希望它们相交,我希望其中三条是绿色的,其余是紫色的 ))

哦,对了,还有那条小猫形状的直线!这条直线是什么?

这个问题对你来说是错误的吗?

 
Alexey Kozitsyn:

没有足够的数据来决定:几个包可能在同一个蜡烛上被关闭(如果你检查,比如说,小时或日线蜡烛)。

在任何情况下,越准确越好......。

在我的版本中,订单是在无损追踪止损条件下关闭的。

if(b+s>0)
{
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
如果(OrderSymbol()==Symbol() &&Magic==OrderMagicNumber() )
{
tip = OrderType();
OSL =NormalizeDouble(OrderStopLoss(),Digits);
OTP = NormalizeDouble(OrderTakeProfit(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;
if(tip==OP_BUY)
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
如果(SL>OSL && SL>NLb)
{
if(!OrderModify(OrderTicket(),OOP,SL,0,0,White))Print("Error Order Modify",GetLastError());
}
}
if(tip==OP_SELL )
{
SL=NormalizeDouble(Ask+TrailingStop*Point,Digits);
如果((SL<OSL || OSL==0) &&)SL<NLs)
{
if(!OrderModify(OrderTicket(),OOP,SL,0,0,White))Print("Error Order Modify" ,GetLastError());
}

 
Alexey Kozitsyn:
编写你自己的MA指标,这将包括一个额外的缓冲区,当一个新的条形图形成时,数值将被输入其中。

我想讨论一种解决这个问题的算法,包括针对不同的移动平均数 平均方法。

 
Alexey Kozitsyn:

我们可以做很多事情:)

确定在X点范围内关闭几个订单(相同或不同类型)的事实(需要X点范围,因为在现实中,所有的交易可能不会以相同的价格关闭),确定平均收盘价,并通过它画一条线。

int TotalPos=-1;

void start()
{
  if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      History();
     }
  }}} TotalPos=OrdersTotal(); // запомним количество
//--
} 
 
 void History() {
  string Ticket=(string)OrderTicket();
  color col=Red;
  if(OrderType()==0)col=Blue;
  datetime a=OrderOpenTime();
  double b=OrderOpenPrice();
  datetime c=OrderCloseTime();
  double d=OrderClosePrice();
  double prSep=OrderProfit()+OrderCommission()+OrderSwap();
  double prAll=0;
  int    cn=0;
  string hTicket;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;
      }
   }}}
   ObjectCreate(Ticket+'Open',OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+'Open',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Open',OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+'Line',OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+'Line',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Line',OBJPROP_WIDTH,1);
   ObjectSet(Ticket+'Line',OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+'Line',OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+'Close',OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+'Close',OBJPROP_COLOR,Green);
   ObjectSet(Ticket+'Close',OBJPROP_ARROWCODE,3);
  
   Ticket=cn>1?hTicket:Ticket;
   ObjectCreate(Ticket+'Profit',OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+'Profit',OBJPROP_ANCHOR,0);
   ObjectSetText(Ticket+'Profit',DoubleToString(prAll,2),10,'Arial',White);
   ObjectSet(Ticket+'Profit',OBJPROP_PRICE1,d);
   ObjectSet(Ticket+'Profit',OBJPROP_TIME1,c+Period()*60*2);

这应该被添加到脚本中...

考虑到如果一系列卖出指令被关闭的事实

ObjectCreate(Ticket+'Debt B',OBJ_HLINE,0,0,d)。
ObjectSet(Ticket+'Debt B',OBJPROP_COLOR,LimeGreen)。
ObjectSet(Ticket+'Debt B',OBJPROP_WIDTH,1)。

如果一系列的买入订单被关闭

ObjectCreate(Ticket+'Debt M',OBJ_HLINE,0,0,d)。
ObjectSet(Ticket+'Debt M',OBJPROP_COLOR,Red)。
ObjectSet(Ticket+'Debt M',OBJPROP_WIDTH,1)。

你能帮忙吗?
 
-Aleks-:

我想讨论一下处理这个问题的算法,包括对于不同的移动平均数 平均方法。

请看一下终端的Include文件夹中的MovingAverages.mqh文件。