どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1091

 
FiVik:

こんにちは。質問ですが、1つのインジケータの値を異なるタイムフレームから価格チャート上に出力するコードの例はどこで見ることができますか?

ググっても出てこないので、もしかしたら間違ったリクエストをしているのかもしれません。

価格チャートの2列目に、H1からW1までのボリンジャーバンドの標準偏差を出力したい。 2列目には、標準偏差に係数を掛けた値が表示される。

ボリンジャーバンドを修正しました。

コードベース検索用キーワード「マルチタイムフレーム

OBJ_LABEL を用いてテキストを表示することができる。

 
LRA:

1.MetaEditorのFile --> Open shared data folderで試してみてください。 フォルダのパスが表示されるはずです。この問題は何度も議論されており、例えば以下のようなリンクが あります。

2.最初はインクルードなしで試してみてください。デバッグするときは、それを入れるようになります。

3.上のSRC ボタン、または下のファイル添付 ボタンを使って、ここに出典を挿入してください。

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

07:00のバーの始値で水平線を 引く方法を教えてください。

このコードを書いたのですが、なぜか線が引けません。どこにエラーがあるのか?

extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {       
   ObjectCreate(ChartID(),"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(ChartID(),PERIOD_H1, StringToTime(StartTime), true); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
   return(0);
   }
 
RichLux:

07:00のバーの始値で水平線を引く方法を教えてください。

このコードを書いたのですが、なぜか線が引けません。どこにエラーがあるのか?

ObjectMoveを削除 すると、ラインが表示される?Alert(StartPrice)を試してみる。
 
LRA:
ObjectMoveを削除すると、ラインが表示される?Alert(StartPrice)を試してみる。

ObjectMoveを外す と線が見えなくなりますが、「IndexOfBar」の 代わりにdouble StartPrice = Open[5];」のように数値を書くと、5本目のバーの始値で線 が引かれるようになります。

アラートでアイデアありがとうございます - 値が "0 "と表示されます。

ちなみに、この行は、値0のオブジェクトのリストにも存在します。

 
RichLux:

07:00のバーの始値で水平線を引く方法を教えてください。

このコードを書いたのですが、なぜか線が引けません。どこにエラーがあるのか?

イナートで描画や計算ができないのは、重大なミスです。イナイトは一刻も早く仕事を終わらせなければならない。

ここでのエラーはint IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //与えられた時間によるバーのインデックスを読み取る StartTime

時刻はdatetime形式で直接設定できるので、変換のために機械時間を浪費する必要はなく、次のように動作します。

#property strict
#property  show_inputs

extern datetime StartTime = D'07:00';          //Начальное время для анализа, 00:00 EST
extern datetime AlTime = D'18:55';          //Время для трейдинга
extern datetime EndTime   = D'20:00';          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
{       
   ObjectCreate(0,"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(_Symbol,0, StartTime, false); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   Print(IndexOfBar,", ",StartPrice);
   ObjectMove(0,"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
   
 
evillive:

initで描画や計算ができないのは、総てが間違いです。イニシエーションは、できるだけ早くその作業を完了させる必要があります。

ここでのエラー -int IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //指定時間によるバーのインデックスを読み取る StartTime

時刻はdatetime形式で直接設定できるので、変換のために機械時間を浪費する必要はなく、次のように動作します。

私のために貴重なヒントをありがとうございました。

そして、間違いを見つけて私の士気を高めてくれたことに特に感謝します。MQL4と友達になれると再び信じ始めている

 
RichLux: のバージョンでは動作しません。グラフの線がまだ表示されない...。
// Вставил такой код в скрипт - линию рисует синюю на черном графике слабо видно
#property strict                                                       // -------- Возможно, Дело в этой строке
        
extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
void OnStart()
{
   ObjectCreate("CORDON",OBJ_HLINE,0,0,Ask);    //созд гор линию по цене Ask   --- Для текущего графика ID пропускаем
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,DarkBlue);  //цвет темно-сиий  --- 0 = текущий график   DarkBlue - то же самое
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош

   // Первый параметр нужен типа string, а функция ChartID возвращает long
   int IndexOfBar = iBarShift(NULL,PERIOD_H1, StringToTime(StartTime), true); //  --- NULL = текущий график  ЗДЕСЬ И БЫЛА ОШИБКА???
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
 
evillive:

initで描画や計算ができないのは、総てが間違いです。initはできるだけ早く完了させる必要があります。


また、イナイトの計算を別の関数に取り込み、この関数をイナイトに挿入すれば、重大なエラーにはならないのでは?

LRA です。

すでに機能しています。

 
RichLux:

また、イナイトの計算を別の関数に取り込み、この関数をイナイトに挿入すれば、重大なエラーにはならないのでは?

コードの実行時間が長すぎると、initeが強制終了し、コードが実行される時間がなくなるだけです。二次関数の呼び出しを含む実行コードは、MQLの定義済み関数(Expert AdvisorのOnTick()、スクリプトのOnStart()、指標のOnCalculate())でなければなりません。

イニテには、プログラム開始の直前に一度だけ実行されなければならないものだけを、最小限のコードで記述しなければならない。例えば、グローバル変数、配列、インジケータ・バッファの初期化など