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

 

Boris.45:

Yedelkin : Time_H1[1][0]は何を返すのですか?

Time_H1[1][0]は、まだパラメータが形成されていないゼロバーのオープン時間です。私の勘違いかもしれませんが、私の経験では、ゼロバーのパラメータを使って時系列を形成すると、歪んでしまうことがあります。

よし、質問を明確にしよう。

Time_H1[nomer_instr][i]=Time_buf[i];" と "Time_H1[1][1]=2011.01.03 11:00:00" の場合、Time_buf[0] は何を返すのでしょうか?

 

ある(特定の)ポジションをクローズするためのリンクを送ってください。


つまり、ある時点で、ポジションを閉じる 条件が満たされたとき、例えばBUYとすると、Expert Advisorは(その時点で)開いているBUYのポジションをすべて閉じます。今、ある(特定の)BUYポジションをクローズする必要があるときに、問題に直面しました。

例えば、BUYポジションを建てるときは、特定の指定をすることができますが、クローズするときは、条件として「BUY」を指定する必要があります。
 
Lester: ある(特定の)ポジションを閉じるためのリンクを送ってください。つまり、ある時点で、あるポジションを閉じる ための条件が満たされたとき、例えばBUYとすると、アドバイザーは(その時点で)あらゆるオープンBUYポジションを閉じるのです。ある(特定の)BUYポジションをクローズする必要があるとき、問題に直面しています。

例えば、BUYポジションをオープンするときは、特定の指定をすることができますが、クローズするときは、その「存在」を指定する必要があります。
また、「任意のオープンポジション」を閉じるにはどうすればよいのでしょうか?基本的に、各オープンポジションは1つのシンボルに対応する。そのため、クローズする際には、オープンポジションに「特定のシンボル」を割り当てるのではなく、そのシンボルの名前を使用する必要があります。
 
以下はその一例です。1回目はフラットで買い、2回目はフラットで売り、トレンドで買いを決済するために買う。買いの終値は、すべてのオープンBAYに対して行われます - 2番目の終値はトレンドにのみ言及するので、これは良いことではありません。
if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3 && Buy_Condition_10)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Позиция на покупку имеется");
            return;    // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL;    // немедленное исполнение
         mrequest.symbol = _Symbol;              // символ
         mrequest.magic = EA_Magic;              // Magic Number
         mrequest.volume = Lot;                  // количество лотов для торговли
         mrequest.type = ORDER_TYPE_BUY;         // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;   // тип исполнения ордера - все или ничего

         //--- отсылаем ордер
         OrderSend(mrequest,mresult);         
                 
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
         }
      }
 if(Buy_Condition_4 || Buy_Condition_5)
     { 
       if(Buy_Condition_6)
        {
         // есть ли в данный момент открытая позиция на покупку?
  if(Buy_opened)
      {
      Alert("Позиция на покупку во Флэте есть");
      return;    // не добавлять к открытой позиции на покупку
      }   
    if(PositionSelect(_Symbol)==true) // есть открытая позиция
      {
       if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
       {
        Alert("Закрываю ордер Sell флэт!!!");                  
                                  
         mrequest.action = TRADE_ACTION_DEAL;// немедленное исполнение
         mrequest.symbol = _Symbol;         // символ
         mrequest.magic = EA_Magic;        // Magic Number
         mrequest.volume = Lot;           // количество лотов для торговли
         mrequest.type = ORDER_TYPE_BUY; // ордер на продажу      
         mrequest.type_filling = ORDER_FILLING_FOK;  // тип исполнения ордера - все или ничего
        //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
          Alert("тикет закрытия Sell флэт #:",mresult.order,"!!");
           }
         else
           {
          Alert("Запрос на установку ордера закрытия Sell флэт не выполнен - код ошибки:",GetLastError());
          return;
           }
         }
       }
   
         mrequest.action = TRADE_ACTION_DEAL;    // немедленное исполнение
         mrequest.symbol = _Symbol;              // символ
         mrequest.magic = EA_Magic;              // Magic Number
         mrequest.volume = Lot;                  // количество лотов для торговли
         mrequest.type = ORDER_TYPE_BUY;         // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;   // тип исполнения ордера - все или ничего

         //--- отсылаем ордер
         OrderSend(mrequest,mresult);         
                 
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Buy на тренд успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy тренд не выполнен - код ошибки:",GetLastError());
            return;
           }         
         }
      }
....
...
if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
         if(PositionSelect(_Symbol)==true) // есть открытая позиция
           {
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
                {
           Alert("Закрываю ордер BUY!!!");                  
                                  
         mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
         mrequest.symbol = _Symbol;           // символ
         mrequest.magic = EA_Magic;           // Magic Number
         mrequest.volume = Lot;               // количество лотов для торговли
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу      
         mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {            
            Alert("тикет закрытия Buy #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера закрытия Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
    }
  }

if(Buy_Close_4 || Buy_Close_5)
        {
         if(PositionSelect(_Symbol)==true) // есть открытая позиция
           {
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
                {
           Alert("Закрываю ордер BUY!!!");                  
                                  
         mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
         mrequest.symbol = _Symbol;           // символ
         mrequest.magic = EA_Magic;           // Magic Number
         mrequest.volume = Lot;               // количество лотов для торговли
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу      
         mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {            
            Alert("тикет закрытия Buy #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера закрытия Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
    }
 
Lester: 以下はその一例です。1回目はフラットで買い、2回目はフラットで売り、トレンドで買いを決済するために買う。しかし、2回目の終値はあくまでトレンドに関係するものなので、これはよくありません。
つまり、1つのシンボルに異なる「ポジション」を閉じるということですか?
 
Yedelkin:
つまり、同じシンボルに対して異なる「ポジション」を閉じるということですか?

そうでもないんです。

買いフラットが開いていると、買いトレンドのクローズができないんです。その逆も然り。

つまり、同じシンボルについて、フラット(フラットが開いている場合)またはトレンド(トレンドが開いている場合)のどちらかの特定のポジションを決済することです。

 
Lester: そうではありません。買いフラットが開いていると、買いトレンドのクローズができない んです。その逆も然り。

つまり、1つのシンボルについて、フラット(オープニングフラットが条件)またはトレンド(オープニングトレンドが条件)のいずれかの特定のポジションを決済 することです。

なるほど、残念ながら、用語が不正確なため誤解を招き、これ以上お力になれません。MQL5では、各シンボルに1つだけポジションが存在することができます。買いフラットと買いトレンドの 2つのポジションは、同時に1つのシンボルに存在 することはできません。実際、ご質問は mql5-positions についてではなく、発注した取引注文の追跡についてです。フォーラムを検索すると、3年前にMT5の「バーチャルオーダー」についての記事がありました。そしてその後、この話題はフォーラムで繰り返し取り上げられた。
 
Yedelkin:

わかりました、質問を明確にします。

Time_H1[nomer_instr][i]=Time_buf[i];" と "Time_H1[1][1]=2011.01.03 11:00:00" の場合、Time_buf[0] は何を返すのでしょう。

私がEAで実現しようとしている考え方を説明してみます。

標準関数として、CopyTime(), CopyOpen(), CopyHigh() 等があり、対応する配列 Time_buf[], Open_buf[], High_buf[] 等を使用する。

これらの関数を使用すると、異なる時間枠と異なる通貨のヒストリカルデータを取得することができます。この場合、Time_buf[0]はゼロバーの開始時刻となる。

High_buf[0]は、ある通貨の価格が最後に到着した瞬間のゼロバーでの最大値です。

そして、時間枠ごとにTime、Openなどのパラメータごとに2次元の配列を作成します。次に、タイムフレームH1について、以下の配列を用意します。

Time_H1[i][j]、Open_H1[i][j]、High_H1[i][j]などの配列で、各行は特定の通貨の履歴データ専用になります。このように

通貨番号によるループを使って for( i=1; i<=nomer_instr; i++ ) 過去のデータ Time_buf[j], High_buf[j] などを配列の対応する行で上書きしています。

Time_H1[i][j]、High_H1[i][j]など。

ティックを使って取引する場合、ゼロバーから現在のパラメータを使用することができます。当然、現在のゼロバーの瞬間のパラメータは

ティックの代わりにバーを使用するExpert Advisorを使用しています。私は、EAがバーで動作しているときに

High_buf[0]とLow_buf[0]の値は、ゼロバーが閉じた瞬間の履歴値ではなく、ランダムな値であることがわかります。したがって、もし私たちが

のパラメータがゼロバーの場合、そのパラメータの履歴シーケンス全体が歪みます。だから、私はゼロバーのパラメータを使わないのです。

長くてすみません。


 

Boris.45:

Yedelkin : OK、質問を明確にします。「Time_H1[nomer_instr][i]=Time_buf[i];」と「Time_H1[1][1]=2011.01.03 11:00:00」なら、Time_buf[0]は何を返すのでしょうか?

私がExpert Advisorに実装しようとしているアイデアを説明しようと 思います。

アイデアについて聞いたわけではないのですが :)

Boris.45: Time_buf[0]- ゼロバーが開く時間です。

それが、あなたのおっしゃる配列の要素を返す値は何ですか?

 

アドバイスお願いします

マーケット一覧の通貨ペアの背景色を変更する方法

あるいは、色を完全に取り除くこともできます。

ありがとうございました。

理由: