任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 132

 
MarkTrade:


它的作用...谢谢你!

我只是希望我明白为什么我的版本不想工作......

难道你看不出其中的差别吗?你有一个错误的比较。

if (a && b < c) - 你不能这样做。

如果(a<c && b<c)--这就可以了

 
artmedia70:

难道你看不出其中的差别吗?你有错误的比较。

if (a && b < c) - 你不能这样做。

如果(a<c && b<c)--你可以。



不,我注意到了差异。只是我相信如果(a && b < c) 是可以的... :-)

现在我知道了,谢谢你!

 
MarkTrade:


不,我注意到了差异。只是我相信如果(a && b < c) 是有可能的......。:-)

现在我知道了,谢谢你!

也许你的意思是如果(a+b < c) ?那么你就可以像这样做了!
 
skyjet:


再次感谢!现在试图使 "可检查 "的条数得到优化,但窗口中的结果就是不存在。试图从头和尾开始数,但都是徒劳。

extern int number=3;
//------------------------------------+
for (int x=number; x>1; x--) // x>1 (а не x>=1)
{
if(Open[x]==Open[x-1]) continue;
if(Open[x]<Open[x-1])
   {
    //--- action 1
   }
else
   {
    //--- action 2
   }
}

你说"......窗口中没有结果 "是什么意思?也许你在窗口中显示的结果不正确,在程序的其他地方有错误?

 

亲爱的伙伴们!请告知是否有任何关于基于技术分析的编程线的文献(教科书),包括Fibo水平。它是可取的,有 "傻瓜 "的程序代码实例。

或者谁能建议一个类似的顾问与开放源代码。

我在此表示感谢。

 
alexey1979621:

亲爱的同志们!请告知是否有任何关于基于技术分析的编程线的文献(教科书),包括Fibo水平。最好是有 "傻瓜 "代码的例子。

我不知道如何使用它。

我非常感激。

这本教科书 有什么问题?无论你需要什么,都要学习、练习,祝你好运
 
artmedia70:
你是否了解并看到在你的数组被 "填充 "了订单数据后,数组中立即包含了什么?不,你不知道,你只是假设。SPRINT所有数组单元格的内容,不是用你的pr(),而是用标准的Print(),试着查看测试者的日志,看看你在数组中的每一个单元格的内容,就在它被填充之后。当你确定数组的内容与你对其内容的想法一致时,就用你的pr()打印它。如果它没有给你同样的结果--这是你的pr(),如果数据匹配,那么在下一步寻找错误。

数组已经被打印出来了,但是,目前,这不是关于它们的。下面我将描述我的想法。

顺便说一下。把所有的输出都换成了标准打印。情况是一样的。出现了在+中关闭4个位置的时刻。然后在逻辑上,isCloseByTakeLastOpenPos() 函数应该工作,我从一开始就这样调用。

 for (int ord=OrdersTotal()-1; ord>=0; ord--)
   {
      if (!OrderSelect(ord,SELECT_BY_POS)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() == 6) continue;
        
      g_ticket = OrderTicket();
      g_type = OrderType();
              
      // Блок модификации ордеров       
      if (i_sl != 0 || i_tp != 0)
      {
         if (OrderStopLoss() == 0 && OrderTakeProfit() == 0)
         {
            OrdersModifyer(g_ticket);
         }
      }
      // Закрытие всех ордеров, если последний ордер закрыт
      if (isCloseByTakeLastOpenPos(2))        // Наша функция, определяющая.. закрылся ли последний закрытый ордер в + или нет.
      {
         // if (g_type < 2)
          {
              ClosePosBySortLots();
          }
          //else
          if (g_type > 1 && g_type < 6)
          {
              DeletePendingOrders(g_ticket);
          }
      }
   }

这将告诉我们,最后一个平仓的订单要么是在获利时平仓,要么是在盈利时平仓。这里有一个函数。

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = -1,               // Время закрытия последнего открытого ордера
            lastOOTHist = -1;                     // Время открытия последнего открытого ордера из истории
   int j = -1;
   Print ("isCloseByTakeLastOpenPos: вошли в функцию");
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
      Print ("isCloseByTakeLastOpenPos: первоначальные условия выполнены!");

      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         j = i;
         Print ("j = " + j + "   " + TimeToStr(TimeCurrent()));
      }
   }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
//      pr ("OTP() = " + OrderTakeProfit() + "; OCP() " + OrderClosePrice() + "   " + TimeToStr(TimeCurrent()));
  //    pr ("OOP() = " + OrderOpenPrice() + "; OCP() " + OrderClosePrice() + "   " + TimeToStr(TimeCurrent()));
      if (MathAbs(OrderTakeProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("\n", "FUNC isCloseByTakeLastOpenPos: ",
                 "\n", "j = ", j,
                 "\n", "lastOOTHist = ", TimeToStr(lastOOTHist, TIME_SECONDS));
      }
   }
   else
   {
      Comment("\n", "FUNC isCloseByTakeLastOpenPos: ",
              "\n", "j = ", j,
              "\n", "не удалось выбрать ордер в истории");
      return(false);
   }
  
   for(int h=OrdersTotal()-1; h>=0; h--)
   {
      if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue;
         if (OrderSymbol() != Symbol())       continue;
         if (OrderType() > 1)                 continue;
         if (lastOOTHist < OrderOpenTime()) return(false);  // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
      else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
   }
   Print ("isCloseByTakeLastOpenPos: последняя закрытая позиция профитна!");
   
   return (true);
}

这种情况很有意思。一切正常。而这里的情况出现了。

我们可以看到,有4个头寸在获利时关闭。 他们被武井关闭。也就是说,关闭订单的功能根本没有发挥作用。原因似乎是关闭条件没有发挥作用。这就是。

 if (isCloseByTakeLastOpenPos(2))

当我们看这个函数并打印所有内容时,就会发现它在那一刻并没有变成真的。怎么说呢?毕竟,最外面的4个订单是以+的方式关闭的。我给出了上述函数的代码。以下是同一时刻日志中的内容。

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #104 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #102 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #100 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #98 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:03 2013.08.15 12:30 Tester: order #104, sell 0.93 EURUSD.GI is opened at 1.32831

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: j = 74 2013.08.15 12:30

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: вошли в функцию

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!


我们可以看到,这个条件并没有发挥作用。这里有什么问题吗?

 
你能告诉我是否有一个指标可以检测整个图表上的价差,或者是否有可能做到这一点? 我只找到了一个指标,它记录了从连接终端的那一刻起,终端被打开时的传播。
 
paladin80:

你说"......结果窗口只是空的 "是什么意思?也许你在窗口中显示的结果是不正确的,而在程序的其他地方有错误?


但我在比较3、2和1条,也就是说,计算受阻于x>=1?

而这是否意味着具有相同价格的酒吧根本不被考虑,它们没有被分配号码?

通过设置优化参数:开始1,步骤1,结束4;在H1和H4上,结果选项卡是简单的空,在D1上,同样的盈利能力,分析的条数不同。

if(Open[x]==Open[x-1]) continue;
 

没有你,专业人员哪里也去不了。

帮助的功能。其中将历史上最后的亏损订单数量计算为加号订单。

也就是说,历史记录显示最后3个订单是负数,然后1个是正数,2个是负数。

这个函数应该计算最后三个(在正序之前)。