来自一个 "傻瓜 "的问题 - 页 33

 
Renat:
i>=0
谢谢你。我很惭愧))。很多时候我在mql4中使用这个枚举,在这么简单的事情上犯了一个错误。
 

不可能选择一个位置。比如说。

   double Stop_Loss   = NormalizeDouble(OrderGetDouble(ORDER_SL),_Digits);
   double Open_Price  = NormalizeDouble(OrderGetDouble(ORDER_PRICE_OPEN),_Digits);
   
   double Amount_Risk = 0.0;
         
   for(count = PositionsTotal()-1; count >= 0; count--)
      {
       if(PositionSelect(SymbolName(count,true)))
         {
          int tp_pos;
          tp_pos = (ENUM_ORDER_TYPE)PositionGetInteger(POSITION_TYPE);
          if(tp_pos == ORDER_TYPE_BUY || tp_pos == ORDER_TYPE_SELL) 
            {
             Amount_Risk = MathAbs(Open_Price - Stop_Loss);
             Print("PositionTotal(): ",PositionsTotal(), " Amount_Risk: ",Amount_Risk);
            }
          if(GetLastError() != 0) Print(ErrorDescription(GetLastError()),", ",GetLastError());
         }
      }

记录本上有一个错误。

如何正确操作?

Документация по MQL5: Торговые функции / PositionSelect
Документация по MQL5: Торговые функции / PositionSelect
  • www.mql5.com
Торговые функции / PositionSelect - Документация по MQL5
 
tol64:

不可能选择一个位置。比如说。

先纠正错误,不要混淆订单类型和位置类型。

 tp_pos = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
 
tol64:

不可能选择一个位置。比如说。

记录本上有一个错误。

如何正确操作?

如果你问你哪里弄错了,那就更容易了......。

为了使其发挥作用,该结构

if(PositionSelect(SymbolName(count,true)))应替换为。

如果(PositionSelect(PositionGetSymbol(count)))

而且你还混淆了ENUM_ORDER_TYPE ENUM_POSITION_TYPE。

 
Rosh:

先纠正错误,不要混淆订单类型和位置类型

弗拉迪克斯。

你要问哪里没有错,那就更容易了......。

谢谢你,我为我真正的严重错误道歉。这是一个暂时的现象,这种误解很快就会过去)。
 

请告知如何解决这个问题。

我正在两台电脑上为MT5开发专家顾问、库和指标。

什么是最简单的方法来组织从一台计算机到另一台计算机的发展转移,最好是自动同步。即自动采取最新鲜的文件并进行复制。

计算机都在同一个网络上。有一个共享文件夹,它是通过互联网共享的。

 
使用VCS
 
TheXpert:
使用VCS
我没有指定Windows7电脑。最难的部分是弄清楚它如何在文件系统中堆放文件。在XP系统中,一切都很清楚,有一个目录,所有东西都在里面,但在这里,所有东西都是分散的。
 
Andrian22:
我没有指定Windows7电脑。最难的部分是弄清楚它如何在文件系统中堆放文件。在XP系统中,一切都很清楚,有一个目录,所有东西都在那里,但在这里,所有东西都是分散的。
参见帮助 - 入门 -终端启动- "访客模式"(使用/portable开关)。
 
Vladix:

如果你问你在哪里得到了正确的答案,那就更容易了......

为了使其发挥作用,该结构

if(PositionSelect(SymbolName(count,true)))应替换为。

如果(PositionSelect(PositionGetSymbol(count)))

我看了看不同的变体,发现它们在最终结果上都是一样的。也就是说,这些选项中的每一个。

 if(PositionSelect(Symbol()))
 if(PositionSelect(PositionGetSymbol(count)))
 if(PositionSelect(SymbolName(count,true)))

...将返回相同的结果。

而在我的案例中,它没有以任何方式影响结果)))完成了剧本。

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
 for(int count = 0; count < PositionsTotal(); count++)
   {
    double Amount_Risk = 0.0;
    string Type_pos;
    
    if(PositionSelect(Symbol()))
    //if(PositionSelect(PositionGetSymbol(count)))
    //if(PositionSelect(SymbolName(count,true)))
      {
       int tp_pos = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
       string Symbol_pos = PositionGetSymbol(count);
       double Acc_Blnc   = AccountInfoDouble(ACCOUNT_BALANCE);
       double Order_Lots = PositionGetDouble(POSITION_VOLUME);
       double Stop_Loss  = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits);
       double Open_Price = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits);
       
       switch(tp_pos)
         {
          case 0 : Type_pos = "LONG";  break;
          case 1 : Type_pos = "SHORT"; break;
         }
       
       Amount_Risk += MathAbs(((((Open_Price - Stop_Loss)*10000)*(Order_Lots*10))/Acc_Blnc)*100);
       
       Print("PositionTotal(): ",PositionsTotal(),", Symbol: ",Symbol_pos,", Position: ",Type_pos,", Amount_Risk: ",DoubleToString(Amount_Risk,2),"%");

       if(GetLastError() != 0) Print(ErrorDescription(GetLastError()),", ",GetLastError()); ResetLastError();
      }
   }
}

现在一切工作都正常了。上面提到的变体被注释出来,你可以进行比较。结果在日志中总是一样的。