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

 

この不具合は、マーケットに他の注文があるが、サイズが異なる場合に発生するようです。

1ロットの売りが4枚、1ロットの買いが4枚あるとします。そして、1は0.5ロットを購入します。

これを避けるにはどうしたらいいのでしょうか?この関数にはループが必要だと思います。

 
EgorKim:

この不具合は、マーケットに他の注文があるが、サイズが異なる場合に発生するようです。

1ロットの売りが4枚、1ロットの買いが4枚あるとします。そして、1は0.5ロットを購入します。

これを避けるにはどうしたらいいのでしょうか?おそらく、この関数の中にループがあるはずです。

ドゥルバシカ」がどこにあるのかわからない。標準ライブラリーを 駆使するのが得意分野。何を選んでいるのかわからない。

      if(m_position.SelectByIndex(i))

そして、それを整理するのが億劫になる。

私なら、もう少し違う方法で解決に臨みます。買いポジションチケットと売りポジションチケットで別々に2つの配列を作り、2つ目のループでペアでポジションをクローズするのです。

あるいは、2次元の配列を1つ作成することもあります。しかし、インデックスの配布には細心の注意を払わなければならない。隙間がないように...。

 
Alexey Viktorov:

どこかでドラマーがいなくなった。標準ライブラ リーを駆使するのは彼の得意とするところです。何を選んでいるのかわからない。

はい、そして私はそれを解決するのが億劫なのです。

私なら、もう少し違う方法で解決に臨みます。買いポジションチケットと売りポジションチケットで別々に2つの配列を作り、2番目のループでペアで閉じますね。

あるいは、2次元の配列を1つ使うこともできる。でも、インデックスの配布には気を遣わなければなりません。隙間がないように...。

私自身も考えたことがあります。2つの配列があるコードを共有できますか?自分ではできない。

一時的な解決策として、限定ループを作りました。このコードが正しいかどうかは分かりませんが、何かあるかもしれません。本当だ、ロット分割で妙に締まる。

どうやら、カウンターのボリュームまで比較した方が、分裂を防げるようです。あきらめます。

void CloseBy()
  {
   int s=10;
   do // цикл
     {
      s--;
      ulong ticket_buy=ULONG_MAX;
      ulong ticket_sell=ULONG_MAX;
      for(int i=0;i<PositionsTotal();i++) // ATTENTION! Here, specially began a detour with "0"
         if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ticket_buy==ULONG_MAX)
               ticket_buy=m_position.Ticket();

            if(m_position.PositionType()==POSITION_TYPE_SELL && ticket_sell==ULONG_MAX)
               ticket_sell=m_position.Ticket();
           }
      if(ticket_buy!=ULONG_MAX && ticket_sell!=ULONG_MAX)
         m_trade.PositionCloseBy(ticket_buy,ticket_sell);
     }
   while(s>1);// цикл
   return;
  }
 
EgorKim:

私自身、考えたことがあります。2つの配列があるコードを共有 できますか?

いいえ、いくつかの理由があります。

1.私自身は、カウンタークロージャーは使っていません。

2.既成のコードはなく、特別に書こうという気もない。

3.昨日、そんなことを思いつきました。昨日、そんなことを思いつきました。今日はもう一本、明日は神頼み。そのため、今、自分の頭の中にあるものしか書きません。

そして一番の理由は、「手伝う」と「誰かの仕事をする」、この2つの大きな違いだと思うんです。

私は助けることしかできません。しかし、私はほとんど標準ライブラリを使って いないので、あなたのコードを理解するためには、SBを理解する必要があり、あなたを助けることはできません。

 

こんにちは

チャート上の特定の範囲や領域でのみ結果を表示するようなインジケータや関数を作る ことができる例を教えてください!

例えば、ターミナルタイム1:00から2:35まで、そしてこの選択は、チャート上で直接マウスを使って行う必要があります。


私は特に、選択された範囲内のバーまたは売りローソクの数をカウントする必要があります。

 
Milhail Novgorodcev:

こんにちは

チャート上の特定の範囲や領域でのみ結果を表示するようなインジケータや関数を作る ことができる例を教えてください!

例えば、ターミナルタイム1:00から2:35まで、そしてこの選択は、チャート上で直接マウスを使って行う必要があります。


具体的には、選択した範囲内の買いまたは売りのローソク足の数をカウントする必要があります。

真っ先に思い浮かんだのは

  • スクリプト、2つの入力パラメータ - 時間から - と時間まで - 。
  • 矩形は手動で描かれ、入力パラメータに矩形名を指定してスクリプトを起動する必要があります。
  • 指定した名前の矩形の作成をトレースするExpert AdvisorまたはIndicator ...

 
Milhail Novgorodcev:

こんにちは

チャート上の特定の範囲や領域でのみ結果を表示するようなインジケータや関数を作る ことができる例を教えてください!

例えば、ターミナルタイム1:00から2:35まで、そしてこの選択は、チャート上で直接マウスを使って行う必要があります。


具体的には、選択した範囲内の買いまたは売りのローソク足の数をカウントする必要があります。

何が問題なのか?

OnChartEvent () 2つの変数に、 順番に、2点でのマウスクリックの時間が割り当てられ(現在の時間ではなく、あなたがクリックしたバーの時間)、両方の変数がゼロでない場合は、この範囲が計算されます。これらの変数は出力後、0にリセットされ、次のマウスクリックを待ちます。

ただ、最初のクリックを間違えてしまった場合、どうやって元に戻すかが問題ですね。でも、ドキュメントを読んで丁寧に考え出すことは可能だと思います。例えば、キーを押したり、マウスのホイールをスクロールさせたり...。

 

助けてください!

履歴でスクリーンショットを撮るスクリプトを修正するのに疲れた。スクリプトは、毎日午前8時にスクロールしてスクリーンショットを撮ることになっています。

スクリプトが正常に動作しない。

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ChartSetInteger(0,CHART_SHIFT,false);
   ChartSetInteger(0,CHART_AUTOSCROLL,false);
   int _bars=Bars(Symbol(),0);
 
   for(int i=0; i<_bars; i++)
     {
      MqlDateTime time_now;
      //datetime candle_time=iTime(NULL,_period,0);
      TimeToStruct(iTime(NULL,_Period,i),time_now);  // change time to struct

      if(time_now.hour==8 && time_now.min==0)
        {
         //--- прокрутим на 10 баров вправо от начала истории 
         ChartNavigate(0,CHART_BEGIN,i);
         Sleep(5000);
         //--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
         long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
         Print(first_bar);
         string name=_Sumbol_N(string(Symbol()))+"_"+Symbol()+"_"+TFMigrate(Period())+" "+string(time_now.year)+"."+string(time_now.mon)+"."+string(time_now.day)+" "+string(time_now.hour)+"."+string(time_now.min);

         ChartScreenShot(0,name+" 2560_1600.PNG",2560,1600,ALIGN_LEFT);
         //i=5;
        };
     };

//Print(iTime(NULL,_Period,0));

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string _Sumbol_N(string ft)
  {
   if(ft ==  "EURUSD" ) return("01");
   if(ft ==  "GBPUSD" ) return("02");

   return "";
  }
//+------------------------------------------------------------------+
string TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return("CURRENT");
      case 1: return("M1");
      case 5: return("M5");
      case 15: return("M15");
      case 30: return("M30");
      case 60: return("H1");
      case 240: return("H4");
      case 1440: return("D1");
      case 10080: return("W1");
      case 43200: return("MN1");

     }
  }
//+------------------------------------------------------------------+
 
oleg360:

助けてください!

履歴でスクリーンショットを撮るスクリプトを修正するのに疲れた。スクリプトは、毎日午前8時にスクロールしてスクリーンショットを撮ることになっています。

スクリプトが正常に動作しない。

今のところ、スクロール機能は不安定に動作しています(というか、予測不能に動作しています)。管理者が整理しています。

 
Vladimir Karputov:

今のところ、スクロール機能が誤動作している(というか、予測不能な動作をしている)。管理者が整理しています。

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

理由: