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

 
bij:

if(iTime(NULL,PERIOD_D1,i+1)!=iTime(NULL,PERIOD_D1,i)&& How do I write this?)

time[i]から日付を抽出し、time[i+1]と比較する必要があります。等しくない場合は、time[i]から時間を抽出し、与えられた時間と比較する。同じであれば、一列に並べる。

これをすべてスクリプトで抽出する方法を示しました。あとは考えるだけです。

 
Artyom Trishkin:

time[i]から日付を抽出し、time[i+1]と比較する必要があります。等しくない場合、time[i]から時間を抽出し、与えられた時間と比較する。同じであれば、線を引いてください。

どのように抽出されるかは、スクリプトで示しました。あとは考えるだけです。

金曜の夜、悪いと思いながら)何も作らない。なぜ?

   datetime date1=time[i]; 
   datetime date2=time[i+1];
 
   MqlDateTime str1,str2; 
   TimeToStruct(date1,str1); 
   TimeToStruct(date2,str2); 
  if(str1.day!=str2.day&&str1.mon!=str2.mon&&str1.year!=str2.year&&str2.hour==17&&str2.min==30){
  
   if(!TrendCreate(0,"closek"+time[i],0,iTime(NULL,PERIOD_D1,i+1),iClose(i+1,NULL,PERIOD_M30),iTime(NULL,PERIOD_D1,i),0,clrLime,STYLE_SOLID,2,false,false,false,false,0))
        {
         continue;
        }
        }
 
Artyom Trishkin:

で、time[i]から時間を抽出し、設定した時間と比較する。

おそらくtime[i+1]は、その日の終値の後に前日までのラインを入れる必要がありますね。

 

こんにちは。

バカな質問ですが、それでもお願いします)

私はある価格で取引を開始し、私は常に長い)そして、私は現在の入札と取引の価格を 比較し、我々は0.5%増加した場合、私は入札でclose.Cursed((

   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (fabs(DEAL_PRICE-Bid[0])/DEAL_PRICE)>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }
 
ISL:

私は、ある価格で取引に参加しました、私はいつも憧れています)そして、私は取引の価格と 現在の入札を比較し、0.5%上昇した場合、私は閉じます。それは入札で誓う((

おそらく、これがMQL5だからでしょう。ここでは "bid "はありませんが、SymbolInfoDouble(_Symbol, SYMBOL_BID)があります。


 
ISL:

こんにちは。

バカな質問ですが、それでもお願いします)

私はある価格で取引を開始し、私は常にロングです)そして、私は取引の価格を 現在の入札と比較し、0.5%上昇した場合、私はclose.Itは入札で誓う((((((((()))))。

悪口はごもっともです。MQL5では、Bid価格を持つこのような配列はありません。

に置き換えてください。

m_symbol.Bid()

そして、サイクルの前に、価格を更新することを忘れないでください。

   if(!RefreshRates())
      return;
 
Vladimir Karputov:

そして、彼が誓うのは正しいことです。MQL5では、Bid価格を持つこのような配列はありません。

に置き換えてください。

そして、ループの前に価格を更新することを忘れないでください。

私は2種類の方法で行いました。

1) Expert Advisorは動作しますが、残念ながらアイデアが出ません。それは簡単で、前のローソク足が下に、次のローソク足が上に閉じたときに買うのです。そして、価格が0.5%上昇した場合のみ決済しています。

変な取引になる((

   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (SymbolInfoDouble(_Symbol,SYMBOL_BID)-DEAL_PRICE)/DEAL_PRICE>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

2)私の方法は以下の通りです。

if(!RefreshRates())
      return; 
   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (m_symbol.Bid())-DEAL_PRICE)/DEAL_PRICE>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

失敗したかな(((;゚Д゚))))))))

エラーが発生します。


 
ISL:

2種類の方法で行いました。

1) Expert Advisorは動作しますが、残念ながらアイデアを実装していません。単純に、前のローソク足が下に、次のローソク足が上に閉じたときに買うのです。そして、価格が0.5%上昇した場合のみ決済するようにしています。

変な取引になる((

2)私の方法は以下の通りです。

失敗したかな(((;゚Д゚))))))))

エラーが出ます。


私のコードを開くと、m_symbolとRefreshRatesの両方が表示されます。

 
Vladimir Karputov:

私のコードのどれかを開けば、そこにm_symbolとRefreshRatesの両方があるのがわかると思います。

ありがとうございます。読んでやりました。

今となっては、なぜアルゴリズムがうまくいかないのかがわからない。

      if(!RefreshRates())
         return;
1)   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
2)      if(m_Position.Select(Symbol()))                             //если уже существует позиция по этому символу
        {
         
          return;                            
        }
2*)    m_Trade.Buy(0.1,Symbol());                                 //если дошли сюда, значит позиции нет, открываем ее
     }
3)  if 
   ((m_Position.PositionType()==POSITION_TYPE_BUY) && (((m_symbol.Bid()-DEAL_PRICE)/DEAL_PRICE)>= 0.1))
       {
         m_Trade.PositionClose(Symbol());   //и тип этой позиции Buy, то закрываем ее
      }


何が起こるかというと、次のような条件のもとで購入されるのです。

1)条件を満たした場合。

2) すでにオープンポジションが あるかどうかを確認し、あれば3)へ、なければ2*)をオープンします。

3) 買いポジションで、エントリー価格から10%上昇したという条件が満たされたら、決済する。

テストでは、以下のように、ポジションが開いたり閉じたりして、条件通りにはいきません(( また、助けてください!

 
ISL:

ありがとうございます。リーディングを行いました。

今となっては、なぜアルゴリズムがうまくいかないのかがわからない。


何が起こるかというと、次のような条件のもとで購入されるのです。

1)条件を満たした場合。

2) すでにオープンポジションが あるかどうかを確認し、あれば3)へ、なければ2*)をオープンします。

3) 買いポジションで、エントリー価格から10%上昇したという条件が満たされたら、決済する。

テストすると以下のようになり、ポジションが開いたり閉じたりして、条件が揃わない(( また、助けてください!

私は次のようなアルゴリズムを提案します。

   if(!RefreshRates())
      return;
   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0]) //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(Symbol())) //если уже существует позиция по этому символу
        {
         if(m_Position.PositionType()==POSITION_TYPE_BUY && (m_symbol.Bid()-m_Position.PriceOpen())/m_Position.PriceOpen()>=0.1)
           {
            m_Trade.PositionClose(Symbol());   //и тип этой позиции Buy, то закрываем ее
            return;
           }
        }
      else
         m_Trade.Buy(0.1,Symbol()); //если дошли сюда, значит позиции нет, открываем ее
     }

m_Positionに注目してください。価格オープン()

理由: