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

 
Евгений:
週末にオープニング スクリプトが動作するかどうかを確認する方法はありますか?
週末にストラテジーテスターで確認できるのは、Expert Advisorのみです。
 
Karputov Vladimir:
OnCalculate()で全てのティックを処理するのはインジケータのみです。スキップなしで。
えーっ、そんな。しかもスキップする。でも、他の人よりは少ない。しかし、それはスキップする。
 
Victor Nikolaev:
あ、いえ。そして、彼は失敗する。でも、他の人よりは少ない。しかし、それはスキップする。
インジケータがOnCalculate()で各入力時にリソース集約的な計算を行う場合にのみ、ティックをスキップすることができます。
 
kashi_ann:

それはよかった、ありがとうございます。

もうひとつ質問です。

オーダーセレクト

注文を選択して、さらに作業を行うことができます。関数が正常に終了した場合、true を返す。関数が失敗した場合、false を返す。エラーの情報を得るには、GetLastError() 関数を呼び出す必要があります。

OrderSelect()
ulong ticket// 発券する
);

パラメータ

チケット

[ご注文のチケットです。

このチケットはどのように割り当てられるのですか?どこで手に入るの?あるいは、どのように設定すればよいのでしょうか?

ヘルプには次のように書かれています。

オーダーゲットチケット

該当する注文のチケットを返し、さらに関数で操作するための注文を自動的に選択します。インデックスごとにすべてのオーダーに目を通し、必要であればチケットを取得しなければなりません。この機能は、注文そのものも選択することになりますが。チケットはブローカーが設定したもので、私たちはそれを変更することができません。

ulong  OrderGetTicket( 
   int  index      // номер в списке ордеров 
   );
 

皆さん、こんにちは。

私は、毎日チャートに「非取引時間帯」を描画する関数を書きました。
しかし、ここで問題が発生します。これを起動すると、OnInitモジュールはそのまま描画しますが、OnTimerモジュールでトリガーすると、何らかの理由で日付変数がOnInitモジュールで割り当てられた値を保持するのです。

質問:なぜですか?

int OnInit()

  {

    EventSetTimer(1);

    MqlDateTime date;

    TimeLocal(date); 

    offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date

    return(INIT_SUCCEEDED); 

  } 

 ...

void onTimer()

  {

    MqlDateTime date;

    TimeLocal(date);

    if (date.hour==9 && date.min==0 && date.sec==0)  offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date

  } 

...
 
INGFX:

皆さん、こんにちは。

私は、毎日チャートに「非取引時間帯」を描画する関数を書きました。
しかし、問題があります。OnInitモジュールで実行されると、日付はそのまま描画されますが、OnTimerモジュールで実行されると、何らかの理由で、日付変数はOnInitモジュールで割り当てられた値を保持します。

質問:なぜですか?

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

バグ、バグ、質問

カルプトフ ウラジミール, 2016.01.09 20:51

タイマーの変数dateに、OnInit()で定義した値が渡されると考える根拠は何でしょうか?

ゾーンを描画する関数を見る必要があります。

完成した。

正しくは、onTimerではなく、OnTimerとなります。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

ingfx さん 2016.01.09 21:20

A)ビジュアル的に見ると、「時間帯」は今日の21:00から23:59まで描かれているのではなく、昨日の21:00から今日の23:59まで描かれているのだから

B) グラフィカルオブジェクトのプロパティ(網掛け長方形-「タイムゾーン」)を開くと、最初の変数が変化していない、つまり昨日の21:00と同じ値になっていることがわかります。

...
bool offtimeCreate(MqlDateTime &stm)
  {
    color clr=Black;
    datetime tm1,tm2;
    tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
    tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

    RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

    return(true);
  }
...

 
Karputov Vladimir:
正解は、onTimerではなく、OnTimerです。
そうです、OnTimerです、ここにコピーするときに間違えました.コード自体は正しいです。
 
INGFX:
はい、OnTimerは、ここに書き直したときにミスをしました....コード自体は正しい

コードを確認したはずです。あなたの断片を縫い合わせるのに疲れている - ので、ここで、コードを確認してください。OnTimerでは、ローカル タイムを代入し、初期化時とタイマー時のプリントを比較します。

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1);
   MqlDateTime date;
   TimeLocal(date);
   offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime date;
   TimeLocal(date);
   if(date.hour==22 && date.min==33 && date.sec==00)
      offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date
  }
//+------------------------------------------------------------------+
/*void offtimeCreate(MqlDateTime &struct_date)
  {
   string text="";
   text=IntegerToString(struct_date.hour)+":"+
        IntegerToString(struct_date.min)+":"+
        IntegerToString(struct_date.sec);
   Comment(text);
//ChartRedraw();
  }*/
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool offtimeCreate(MqlDateTime &stm)
  {
   color clr=Black;
   datetime tm1,tm2;
   tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
   tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

   Print(tm1+"      "+tm2);
//RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

   return(true);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

コードを確認したはずです。

ウラジミールさん、お待たせしました。
本当にコードに間違いがあったのか.
これからはもっと気をつけます。

理由: