"ダミー "からの質問 - ページ 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))) に置き換える必要があります。

if(PositionSelect(PositionGetSymbol(count)))

さらに、ENUM_ORDER_TYPEと ENUM_POSITION_TYPEを混同しています。

 
Rosh:

オーダータイプとポジション タイプを混同しないように、まずはエラーを修正してください。

Vladix:

どこが間違えていないのか、聞いたほうがわかりやすいと思うのですが...。

ありがとうございます。そして、本当に重大な間違いをお詫びします。これは一時的な現象で、誤解はすぐに解けるでしょう)。
 

この問題を解決する方法を教えてください。

2台のPCでMT5用のExpert Advisor、ライブラリ、インジケータを開発しています。

あるコンピュータから別のコンピュータへの開発の転送を整理する最も簡単な方法は何ですか、できれば自動同期が可能であることが望ましいです。つまり、最も新鮮なファイルを自動的に取り出して複製することです。

コンピュータは同じネットワーク上にあります。インターネット上で共有される共有フォルダーがあります。

 
VCSを使う
 
TheXpert:
VCSを使う
Windows7のパソコンを指定したわけではありません。一番難しいのは、ファイルシステム内のファイルをどのように積み重ねるかを理解することです。XPのときは、1つのディレクトリにすべてが収まっていてクリアだったのですが、ここではすべてがばらばらになっています。
 
Andrian22:
Windows7のパソコンを指定したわけではありません。一番難しいのは、ファイルシステム内のファイルをどのように積み重ねるかを把握することです。XPでは、1つのディレクトリにすべてが揃っていましたが、ここではすべてがばらばらです。
ヘルプ - はじめに -端末の起動- 「ゲストモード」(/portableスイッチ使用時)を参照してください。
 
Vladix:

どこが正解なのか聞いた方がわかりやすかったのでは...。

それを実現するために、コンストラクト

if(PositionSelect(SymbolName(count,true))) に置き換える必要があります。

if(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();
      }
   }
}

これですべて正常に動作するようになりました。上記のバリエーションはコメントアウトされており、比較することができます。結果は常に同じログが表示されます。