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

 
Dozol:


罗杰,我无法理解!

在图表上抛出一条水平线,固定其价格,删除该线--它不再需要了。我们立即在这个价格上设置了一个订单。

错在哪里呢?为什么卖出止损不能打开?

如果我只需要水平线的价格值,为什么还要继续跟踪价格?

解释一下吧!!!。帮助!请提供更多细节!

Sellstop是错误的,它将会打开。

现在是关于线条的问题。当我进行实盘交易时,我查看图表并放置一条水平线,条件合适,线被删除,订单被打开。这比简单的热键脚本好在哪里?在测试器中,为了画线,你必须启用可视化并观察图表。我甚至不明白为什么我们要把它添加到测试器中。

 
borilunad:
对不起!然后上厕所,睡觉!祝你有个愉快的早晨!;)
好的。我自己会搞清楚的,这不是一个无法解决的谜题。但到目前为止,我所能想到的就是拐杖。拐杖法不是一个好方法...
 
好心人,你能告诉我什么是错的吗。在卖出交易中,在0条的第一个点上开盘,止损 应该设置在第一根蜡烛的高点之上30点(5位)。是这样写的,但根本没有设置止损。
     Price = NormalizeDouble(Bid, Digits); // округляем до нужного нам числа цифр после запятой
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
     {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL= Price + StopLoss*Point;
       SL = NormalizeDouble(SL, Digits); // округляем до нужного нам числа цифр после запятой
      }
 
artmedia70:

在你的手指上呢?时间和价格怎么能告诉你要收手的?我自己当然能想到,但现在是早上7点43分,我还没有睡觉。


如果现在是7点43分,我还没有睡觉...因此,我将假设它是圣杯!
 
alexey1979621:
善良的人们,告诉我什么是错的。在卖出交易中,在0条的第一个点上开盘,止损应该设置在第一根蜡烛的高点之上30点(5位)。写到这里,但止损根本就没有放。

StopLoss = iHigh(Symbol(),0,1)+30*Point;

这是你想要的止损水平,例如,1.5000+30*0.00001=1.5003。


SL= Price + StopLoss*Point; 
否则你为什么要在价格 上加上StopLoss*Point(1.5003*0.00001=0.000015)。SL几乎等于价格,这就是为什么没有设置StopLoss。
 
止损仍然没有设置,但止盈却起了作用。附上止损和止盈 代码
Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1)) 
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
artmedia70:
1.寻找最后关闭的位置(MODE_HISTORY)。
2.如果它在(或接近)外卖店关闭 --> 记住它的开放时间 -->
3.查看所有未结头寸(MODE_TRADES),并将其开仓时间与记忆中的时间(从第2点开始)进行比较 --> 如果记忆中的被标记关闭的头寸的开仓时间(从第2点开始)与其他未结头寸的开仓时间相比是最长的 --> 这意味着最后的未结头寸被标记关闭 -->
4.裁剪/删除所有其他的东西。


嗯,好像是这样写的。但结果却不尽相同。

以下是我的看法。

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
datetime GetLastOrderState()
{
   datetime lastOrderCloseTime = -1,               // Время закрытия последнего открытого ордера
            lastOOTMarket = -1,          // Время открытия последнего открытого ордера рыночного
            lastOOTHist = -1;            // Время открытия последнего открытого ордера из истории
   
   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;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
      if (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0);
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
   
   Comment("Время открытия последнего открытого ордера = ", lastOOTHist);
  
   for (int h=OrdersTotal()-1; i>=0; i--)
   {   
      if (!OrderSelect(h, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      {
         if (lastOOTMarket < OrderOpenTime())
             lastOOTMarket = OrderOpenTime();
  
         if (lastOOTMarket < lastOOTHist)      // Если время открытия последнего открытого ордера (рыночного) ниже последнего открытого ордера из истории..
             lastOrderCloseTime = OrderCloseTime(); // Значит это искомый ордер
      }
   }

   Comment("Время закрытия последнего открытого ордера = ", lastOrderCloseTime);
   return (lastOrderCloseTime);
}
 
alexey1979621:
好心人,你能告诉我什么是错的吗。在卖出交易中,在0条的第一个点上开仓,止损应该放在第一根蜡烛的高点之上30点(5位数)。这样写的,但止损根本就没放。

你在这里所拥有的根本就不是什么。让我们从以下事实开始:空头收盘总是在ASC上,而不是在BID上。
 
alexey1979621:
止损仍然没有设置,但止盈却起了作用。附上止损和止盈代码

Price = NormalizeDouble(Bid, Digits);  
     if(StopLoss > 0)
     if(Bid < iHigh(Symbol(),0,1))               // Здесь еще STOPLEVEL нужно проверять, иначе частые ошибки будут
      {
       StopLoss = iHigh(Symbol(),0,1)+30*Point;  // Здесь вместо переменной StopLoss попробуйте поставить SL
       SL = NormalizeDouble(SL, Digits); 
      }
       else SL = 0;
       if(TakeProfit > 0)
      {
       TP = Price - TakeProfit*Point;
       TP = NormalizeDouble(TP, Digits); 
      }
       else TP = 0;
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,"Pattern_1",Magic,0,Red);
      return;
      }
 
hoz:


嗯。似乎已经写好了。但输出是错误的...

这就是我得到的东西。

当搜索最后一个关闭的订单 时,应该先找到最近的一个,但在取款时关闭的检查应该从循环中取出,否则它会检查 每个关闭的订单 是否在取款时关闭,如果是的话,它会记住循环中第一个在取款时关闭的订单的时间,而不是最近的那个。