ファイルからEAを自動で初期化・再初期化 - ページ 7

 
Fry_Антон:

なるほど。

具体的な内容:明日はFORTSでその場でポジションを獲る方法を考えてみます。実は、私が最も必要としているのは、クリア(清算価格での再開)されたポジションの本当の始値を知ることなのです。

FORTSのポジションは、1つ(または複数)の注文の取引の合計で得られます。クリア時にチケットのないテクニカルトレードがあるので、クリア前のPOSITION_PRICE_OPEN価格をどのように決定するか考える必要があります。

収納することができます。寿命だけ決める。例えば、EAがマーケットから外れている(ポジションがない)ことを忘れるため。
 
Dmitry Fedoseev:

明らかに、もし。

削り続けなければならないのです。でも、少なくとも専門家をブロックするのはやめましょう。多分、図々しくなくチマチマと、ミスの数が増えてきたら、試行の間隔を長くしていく。最も簡単な方法は、数回トライして、次のバーが開くまで一時停止することです。

2,000件を超えた場合の取引所罰則はどうなるのでしょうか?例えば、50個のEAを持っていて、2,000回のトランザクションが経過したとします。取引所から金銭的なペナルティーを受けたのですが、次に何をすればよいですか?
 
Fry_Антон:

なるほど。

具体的な内容:明日はFORTSでその場でポジションを獲る方法を考えてみます。実は、私が最も必要としているのは、クリア(清算価格での再開)されたポジションの本当の始値を知ることなのです。

FORTSのポジションは、1つ(または複数)の注文の取引の合計で得られます。クリア時にチケットのないテクニカルトレードがあるので、クリア前のPOSITION_PRICE_OPEN価格をどのように決定するか考える必要があります。

//+------------------------------------------------------------------+
//| Expert Get position price function                               |
//+------------------------------------------------------------------+
double GetPositionPrice( const string aSymbol )
{
  double price_in = 0;
  double volume_in = 0;
  
  if ( PositionSelect( aSymbol ) )
  {
    ulong pos_id = ulong( PositionGetInteger( POSITION_IDENTIFIER ) );
    
    if ( pos_id > 0 )
    {
      if ( HistorySelectByPosition( pos_id ) )
      {
        int deals = HistoryDealsTotal();
      
        for( int i = 0; i < deals; i++ )
        {
          ulong deal_ticket = HistoryDealGetTicket( i );
          ulong order_ticket = ulong( HistoryDealGetInteger( deal_ticket, DEAL_ORDER ) );
        
          if ( order_ticket > 0 )
          {
            ENUM_DEAL_ENTRY deal_entry = ENUM_DEAL_ENTRY( HistoryDealGetInteger( deal_ticket, DEAL_ENTRY ) );
              
            if ( deal_entry == DEAL_ENTRY_IN )
            {
              double price = HistoryDealGetDouble( deal_ticket, DEAL_PRICE );
              double volume = HistoryDealGetDouble( deal_ticket, DEAL_VOLUME );
                                
              price_in += price * volume;
              volume_in += volume;  
            }
          }
        }
        if ( volume_in > 0 ) return( NormalizeDouble( price_in / volume_in, _Digits ) );
      }
      else
      {
        Print( "GetPositionPrice: Невозможно получить историю позиции по символу ", aSymbol );
      }
    }
    else
    {
      Print( "GetPositionPrice: Невозможно определить идентификатор позиции по символу ", aSymbol );
    }
  }
  return( 0 );
}
 
Михаил:

素晴らしい明日、ボルトで固定します。

あなたのおかげで時間が節約できました。ありがとうございます(苦笑)。

 
Fry_Антон:

やた明日、添付します。

あなたのおかげで時間が節約できました。ありがとうございます。

メモ

この機能は、取引開始時にのみ使用できます。

(すなわち、ポジションの縮小はなかった)。

両方必要な場合は、DEAL_ENTRY_OUT 関数に追加してください。

 
Михаил:

メモ

この機能は、取引開始時にのみ使用できます。

(立ち位置が下がらない)

両方必要な場合は、DEAL_ENTRY_OUT 関数に追加してください。

と、すぐに理解できました。ここで重要なのは原理そのものであり、履歴の中のID検索であり、本来は上の質問の完全な答えなのです。


正直なところ、技術的な課題をクリアするために、なぜこのような「不器用な」設計にしたのか、開発者の論理が理解できません。

チャート上のグラフィックオブジェクトも、ヒストリーのポジションプロパティも、さらにはオープンポジションのプロパティ(収益性)も、すべてがEAの単純なコードだけでなく、一般的なトレーダーにとっても誤解を招くものです。

 
kond777:
また、2,000トランザクションを超えた場合の取引所罰金についてはどうでしょうか。50個のEAがあり、2,000トランザクションが経過しているとします。取引所から罰金を受け取ったのですが、次に何をすればいいですか?

質問の答えを知ることはできません。

罰金を受けないためには、専門家の仕事を止める必要がある(ずいぶん前にあなたと私が議論した)。

もし、ミラクルプログラマーが「止める必要がある」と言えば、彼はそれによって自分が

プログラムばか

取引の専門家....

 
Михаил:

答えを知ることはできません。

罰金を受けないためには、専門家の仕事を止める必要がある(ずいぶん前にあなたと私が議論した)。

もし、ミラクルプログラマーが「止める必要がある」と言えば、彼はそれによって、自分が

プログラムばか

取引のエキスパートアドバイザーは...。

私見ですが、ドミトリー・フェドセーエフ 氏は物知りという印象があり、きっとこの問題の解決策を提示してくれると信じています。
 
Михаил:

そう、MT4では良くて、MT5では全く「無駄」なことをアドバイスしているからです

あなたのメッセージから、あなたがMT5の仕組みを知らないことは明らかです。

そして、エキスパート・プログラミングの原則が情けないかどうかを判断するのは、あなたではありません

私はあなたを権威とは全く思っておらず、生意気な生意気坊主としか思っていません

嫉妬しているのでしょうか?そして当然のことながら、年老いた極楽鳥より若い子犬の方がいい。
 
Алексей Тарабанов:
嫉妬か?その通り、年老いた極楽鳥より、若い子犬の方がいい。
水たまりの中にもっとガスが...。