[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 118

 

对不起,Alex12,但你看起来像个推土机(无意冒犯,这是个公认的术语)。你用不同的碎片做了一些东西,并以某种方式让它编译,但你并不了解代码的含义。

联系服务工作

 
alex12:

它产生了大量的错误


当使用Igor Kim的一些函数时,请确保你的代码中有他遗漏的函数,而编译器会告诉你。在他的分支中找到它们,并把它们写入你的代码中。
 
chief2000:
...

OrderOpenTime()显示了开仓的时间,我的问题是,我如何知道STOP订单被设置的时间?
MT4报告中有这个时间,但是否可以从代码中找出这个时间?


再一次。

在一个 "标准 "循环中查看你所有的止损单,并为你自己取消打印它们的OrderOpenTime()的值--这必须是它们(每个)被设置的时间。下面是一个市场订单的例子--调整一下,也就是说,或者完全删除这一行

如果((orderType != OP_BUY)&&(orderType != OP_SELL))继续。

或者用你感兴趣的止损单的数据来替换它...

int orderCount = 0; // сбрасываем счетчик ордеров 
      // ------------------------------------------------Считаем только наши ордера---------------------------
   int orderType;
   for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))     continue; // если ордер не выбран, то идем на следующий открытый
      if(OrderCloseTime()!=0) continue;                          // если тикет принадлежит закрытому ордеру, то берем следующий открытый
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic))   continue;
      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL))   continue;
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера 
          Time = O rderOpenTime();
         
                     
         
      orderCount++;                     // считаем ордера (не больше i)           

    }   
 
Roman.:


再一次。在一个 "标准 "循环中查看你所有的止损单,对你自己来说,取消打印它们的OrderOpenTime()的值--这必须是它们(每个)被设置的时间。下面是一个市场订单的例子--调整一下,也就是说,或者完全删除这一行

如果((orderType != OP_BUY)&&(orderType != OP_SELL))继续。

或者用你感兴趣的止损单的数据来代替它...

在这里,在这个阶段我遇到了一个难题--我需要打开STOP订单的时间来进行一些 "统计",我不希望这个过程一直运行,而只是在最后的某个步骤。由于这个原因,我们不需要搜索当前开放的订单(OrdersTotal()),而是在已经关闭的订单中搜索 => OrdersHistoryTotal()。
但对于已经平仓的STOP订单,OrderOpenTime()返回开仓 时间,而不是下单时间。
结果,这一切都归结为:是否有可能从OrdersHistoryTotal()的列表中检索到STOP订单的建立时间?
 
chief2000:
这时我遇到了一个难题--我需要STOP订单的开盘时间来进行一些 "统计",我不希望这个过程一直运行,而只是在某个最后阶段。由于这个原因,我们不需要搜索当时打开的订单(OrdersTotal()),而是在已经关闭的订单中搜索 => OrdersHistoryTotal()。
但对于已经平仓的STOP订单,OrderOpenTime()返回开仓时间,而不是下单时间。
结果,这一切都归结为:是否有可能从OrdersHistoryTotal()的列表中检索到STOP订单的建立时间?

是的...这个挑战...我不知道。看起来你不能 - 特别是在 "最后阶段"...

你必须不断监测这个过程,并保持跟踪--见前页的常见问题帖子。

 
Roman.:

是的...这个挑战...我不知道。看起来你不能 - 特别是在 "最后阶段"...

你必须不断监测这个过程并保持跟踪--见上一页的常见问题帖子。

如果没有找到其他解决方案,我将使用OrdersTotal() 中的订单。
总之,谢谢你!
 
在这种情况下,写到文件里比较容易,比较省事,而且可以按照你的需要来组织统计数据,而不是终端。
 
FAQ:
在这种情况下,写到文件里更容易,更省事,而且可以按照你的需要来组织统计数据,而不是终端。
谢谢你!
 

我想写一个 关于钳形图案的专家顾问

我已经选择了

Low2=Low[iLowest(NULL,0,MODE_LOW,10,2)]    
High2=High[iHighest(NULL,0,MODE_HIGH,10,2)]     

if(Low[1]==Low2) bull_pincet=true;
if(High[1]==High2) bear_pincet=true;

   while(true)
      {
       
       if(Total==0 && bull_pincet==true)
        {
         sl=Low[1];
         if(sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend(Symb,OP_BUY,Lts,Ask,3,sl,tp);
         return;
        }

        if(Total==0 && bear_pincet==true)
         {
          sl=High[1];
          if(sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
          OrderSend(Symb,OP_SELL,Lts,Bid,3,sl,tp);
          return;
         }
       break;
      }   

不幸的是,我的条件是错误的,因为'sl'被设置为100.00000,'tp'显示错误。

我决定添加一个条件,考虑1个勾。

static datetime TimeSaveH1  = 0;
int init()
{
     TimeSaveH1  = iTime( Symbol(), Period(), 0); // берем открытия время текущего бара
}

int start()
{
         if (TimeSaveH1!=iTime( Symbol(), Period(), 0))
            {
               TimeSaveH1=iTime( Symbol(), Period(), 0); 
            }  

Low2=Low[iLowest(NULL,0,MODE_LOW,10,2)]    
High2=High[iHighest(NULL,0,MODE_HIGH,10,2)]     

if(Low[1]==Low2 && TimeSaveH1===iTime( Symbol(), Period(), 0) bull_pincet=true;
if(High[1]==High2 && TimeSaveH1===iTime( Symbol(), Period(), 0) bear_pincet=true;
   while(true)
      {
       
       if(Total==0 && bull_pincet==true)
        {
         sl=Low[1];
         if(sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend(Symb,OP_BUY,Lts,Ask,3,sl,tp);
         return;
        }

        if(Total==0 && bear_pincet==true)
         {
          sl=High[1];
          if(sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
          OrderSend(Symb,OP_SELL,Lts,Bid,3,sl,tp);
          return;
         }
       break;
      }   




}

结果是一样的。我怎样才能解决我的问题?

 
kilnart:

我想写一个关于钳形图案的专家顾问。

我已经选择了

不幸的是,我的条件是错误的,因为'sl'被设置为100.00000,'tp'显示错误。

我决定增加一个条件,考虑1个刻度。

结果是一样的。 我怎样才能正确地解决我的问题?

你有一个变量Step=100?如果是这样,看看你在代码中进一步得到什么。