初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 485

 
-Aleks-:

よろしくお願いします!

各(とする)日の最大 ドローダウンを求める必要があります(ファイルへの書き込みは1日に1回発生します) - MT4ターミナル。

最大ドローダウンはピークから現在の資金ドローダウンまでのチャート上の距離で、資金ドローダウンは現在の損失額です。

次のようなコードを書きました。

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew==AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

しかし、あるチャートでは正しく、あるチャートでは異常である。

どうやらコードかロジックを間違えたようなのですが、どれが原因かわかりません。

私の知る限り、EquityのピークからEquityのピットまで数えるべきで、残高から数えるのではない、これではドローダウンがとてもよく見えてしまう

そして、あなたのコードが返信の中で繰り返され、サイトを乱雑にしないように、他のボタンではなく、SRC ボタンを使ってください。

 
Boris:

私の知る限りでは、残高からではなく、エクイティのピークからエクイティのピットまで数える必要があり、これはドローダウンのイメージを本当に柔らかくします。

そして、あなたのコードが返信の中で繰り返され、サイトを乱雑にしないように、他のボタンではなく、SRC ボタンを使ってください。

残高を資金に変更 - テスターとまだ合わない - テスターの値の方が大きい。ACCOUNT_PROFITは実際には残高と資金の差分であり、多分それが ポイントです...。一方、EAが動作するために必要な資金量を調べるのが作業であり、資金の上限を考慮するのは意味がないように思うのですが...。

SRCが何なのかわからないから使わない。

 
-Aleks-:

ACCOUNT_PROFITは、実は残高と資金の差分なんです、多分それ です・・・。一方、EAを動作させるためにどれだけの資金が必要かを調べる作業であり、資金の上限を考慮するのは意味がないように思うのですが......。

SRCが何なのかわからないから使わない。

ビデオカメラの左側にあるボタン(上図)は、コード挿入用のボタンです

エクイティについてBalanceをEquityに置き換えると、Equity = Balance + Profitとなるので、ACCOUNT_PROFITを 除外しなければならない。しかし、ターミナルでは常にEquityが変化しており、テスターではポジションクローズ 時にEquityとドローダウンが修正されるため、中間ドローダウンはテスターで修正されません。その結果、テスター上では現実よりも市場の状況が魅力的になっています。最近、EAの各アクション、オープニング、修正、クロージングなどに必要なすべての情報をテスター、デモ、リアルでプリントアウトしています。でも、もうお気づきでしょう。;)

 

こんばんは、標準ライブラリのCTrailingFixedPipsクラスについて教えて いただきたいのですが、TakeProfitレベルの「trailing」の意味は何ですか?到達することはないのでしょう?私が何かを理解していないか、コードや意味を理解していないかのどちらかです。

ドキュメントより

"価格インデントがストップロスレベルより高い場合、そのポジションの新しいストップロス価格が提案さ れます。ストップロスの変更条件が満たされ、テイクプロフィットのレベルがゼロ でない場合、ポジションに新しいテイクプロフィット価格を設定することが推奨さ れます。"

<ExpertTrailingCTrailingFixedPips.mqh>の場合

//+------------------------------------------------------------------+
//| Checking trailing stop and/or profit for long position.          |
//+------------------------------------------------------------------+
bool CTrailingFixedPips::CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp)
  {
...
...   
   delta=m_stop_level*m_adjusted_point;
   if(price-base>delta)
     {
      sl=price-delta;
      if(m_profit_level!=0) tp=price+m_profit_level*m_adjusted_point;
     }
...
  }
 
Hexen:

こんばんは、標準ライブラリのCTrailingFixedPipsクラスについて教えて いただきたいのですが、TakeProfitレベルの「trailing」の意味は何ですか?到達することはないのでしょう?私が何かを理解していないか、コードや意味を理解していないかのどちらかです。

ドキュメントより

"価格インデントがストップロスレベルより高い場合、そのポジションの新しいストップロス価格が提案さ れます。ストップロスの変更条件が 満たされ、テイクプロフィットの レベルがゼロでない場合、ポジションに新しいテイクプロフィット 価格を設定することが推奨されます。"

<ExpertTrailingCTrailingFixedPips.mqh>の場合

これは誤植である可能性が高いです。Stop Lossとすべきです。
 
Hexen:

こんばんは、標準ライブラリのCTrailingFixedPipsクラスについて教えて いただきたいのですが、TakeProfitレベルの「trailing」の意味は何ですか?到達することはないのでしょう?私が何かを理解していないか、コードや意味を理解していないかのどちらかです。

ドキュメントより

"価格インデントがストップロスレベルより高い場合、そのポジションの新しいストップロス価格が提案さ れます。ストップロスの変更条件が満たされ、テイクプロフィットのレベルがゼロ でない場合、ポジションに新しいテイクプロフィット価格を設定することが推奨さ れます。"

<ExpertTrailingCTrailingFixedPips.mqh>の場合

上記のコードから判断すると、TPはSLと同期して動きます。トレーリングストップをねじ込む)
 
Boris:

ビデオカメラ(上図)の左側にあるこのボタンは、コードを挿入するためのものです

コード用の「コード」スタイルがあり、メニューから選択するのですが、私が使っているのはこれです。

ボリス

エクイティについてBalanceをEquityに置き換えると、Equity = Balance + Profitとなるので、ACCOUNT_PROFITを 除外しなければならない。しかし、ターミナルでは常にEquityが変化しており、テスターではポジションクローズ 時にEquityとドローダウンが修正されるため、中間ドローダウンはテスターで修正されません。その結果、テスター上では現実よりも市場の状況が魅力的になっています。最近、EAの各アクション、オープニング、修正、クロージングなどに必要なすべての情報をテスター、デモ、リアルでプリントアウトしています。でも、もうお気づきでしょう。;)

レポートのテスターで固定されているドローダウンがポジションクローズ時のみであれば、マーケットで1つのオーダーを使用してもドローダウンは発生しないはずですが、そうではありません;)

ACCOUNT_PROFIT = Funds-balanceなので、この指標を計算に使わない理由はないと思うのですが・・・。

 
-Aleks-:

よろしくお願いします!

各(とする)日の最大 ドローダウンを求める必要があります(ファイルへの書き込みは1日に1回発生します) - MT4ターミナル。

最大ドローダウンはピークから現在の資金ドローダウンまでのチャート上の距離で、資金ドローダウンは現在の損失額です。

次のようなコードを書きました。

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew== AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

しかし、あるチャートでは正しく表示され、他のチャートでは表示されない。 同時に、チャートのビジュアルも同じである。

コードかロジックに間違いがあったのでしょうが、どれが原因かわかりません。

コードに間違いを発見しました。

 BalansNew=AccountInfoDouble(ACCOUNT_BALANCE); 

しかし、それでもポティックの計算とテスターの結果が異なる原因を解決するには至りませんでした。

ボリスさんの理論を株式計算で確認したところ、結果もマイナスでした。

   if(Analiz_Prosadki==true)

     {

      if(ContolSavaTXT==1)

        {

         ProfitNew=0;

         ContolSavaTXT=0;

        }


      if(ContolSavaTXT==0)

        {

         BalansNew=AccountInfoDouble(ACCOUNT_EQUITY);  //Текущее значение баланса

         if (BalansNew>BalansMax) BalansMax=BalansNew;

         if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;

         if (ProfitNew<ProfitMin) ProfitMin=ProfitNew;

        }


      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitNew);   // Пишем информацию в файл - функция возвращает 1

     }

ところで、1ロットしか取引していないのに、テスターのチャート上でequityとbalanceがずれているのは、どうしたことでしょう。

 
-Aleks-:

コードに間違いがありました。

 BalansNew=AccountInfoDouble(ACCOUNT_BALANCE); 

しかし、それでも、計算されたエクイティとテスターの結果が異なる原因を解決するには至りませんでした。

ボリスさんの理論を株式計算で確認したところ、結果もマイナスでした。

   if(Analiz_Prosadki==true)

     {

      if(ContolSavaTXT==1)

        {

         ProfitNew=0;

         ContolSavaTXT=0;

        }


      if(ContolSavaTXT==0)

        {

         BalansNew=AccountInfoDouble(ACCOUNT_EQUITY);  //Текущее значение баланса

         if (BalansNew>BalansMax) BalansMax=BalansNew;

         if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;

         if (ProfitNew<ProfitMin) ProfitMin=ProfitNew;

        }


      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitNew);   // Пишем информацию в файл - функция возвращает 1

     }

ところで、1ロットしか取引していない場合、チャート上のテスターでは、equityとbalanceがどのように非同期化されるのかがよくわかりません。

エクイティとバランスがどのようにずれているのか」を理解するためには、バランスとは何か、エクイティとは何かを理解する必要があります。

残高 - アカウントの持分額。

エクイティ - 現在の、口座の変動する金額です。

あなたのテスターにも同じ機能があり、ドローダウンを修正しますが、あなたが望むような形ではありません。

つまり、最大ドローダウンを計算するためには、その値を格納するための静的変数 またはグローバル 変数を宣言し、この変数をあなたのコードのように書き換える必要があるのです。

これが今、あなたが書いたものです...。

if (BalansNew>BalansMax) BalansMax=BalansNew; // Если новое значение эквити больше зафиксированного в прошлый раз - перезапишем значение переменной

// но это не просадка, это максимальная прибыль

if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;  // А здесь BalansNew уже равно BalansMax и эта строка не выполняется никогда...

maxとminの2つの変数を作り、そこに値を書き込む必要があります。

そして、ここで声を大にして思うことがあります。当日の分ではなく、注文を閉じるときにファイルに書き込んで、変数を書き換えたほうがいいのでは?このときEquityはbalanceと等しいので、maxとminが書かれている変数をゼロにする必要があります。

 
Alexey Viktorov:

エクイティとバランスがどのようにずれているか」を理解するためには、バランスとは何か、エクイティとは何かを理解する必要があります。

残高とは、口座にある一定の資金量のことです。

エクイティ - 現在の、口座の変動する金額です。

今書いているテスターにも同じ機能があり、ドローダウンが修正されますが、思い通りにはいきません。

つまり、最大ドローダウンを計算するためには、その値を格納するための静的変数 またはグローバル 変数を宣言し、この変数をあなたのコードと同じように書き換える必要があるのです。

それが今書いてあることなんですね...。

if (BalansNew>BalansMax) BalansMax=BalansNew; // Если новое значение эквити больше зафиксированного в прошлый раз - перезапишем значение переменной

// но это не просадка, это максимальная прибыль

if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;  // А здесь BalansNew уже равно BalansMax и эта строка не выполняется никогда...

maxとminの2つの変数を作り、そこに値を書き込む必要があります。

そして、ここで声を大にして思うことがあります。当日の分ではなく、注文を閉じるときにファイルに書き込んで、変数を書き換えた方がいいのでは?このとき、equityはbalanceと等しく、maxとminが書かれている変数をゼロにする必要があります。

リクエストに応えていただき、ありがとうございました

グローバル変数は実際の市場操作に関係するものです。私はテスト情報が必要で、それが理由で悩んだわけではありません。

残高と資本とは、もちろん分かっているのですが、ドローダウンの計算に失敗しました。 私のコードサンプルを見ると、残高と資金の両方を最大、残高と資金を最小とするようにしたことが分かります。

不等式if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax; が満たされないのはなぜだと思いますか?それは新しいバランスの最大値に達したときにバー上で満たされないだけです(または株式 - まだ真実ではない)、しかしその時点で私は利益のドローダウンProfitMin=ProfitNewを修正 します。

一日のファイルを記録することは、最大ドローダウンが通常注文を閉じる瞬間に到達しないため、より関連性が高く、目標はExpert Advisorの作業に必要な平均金額を計算することである。

理由: