正方形や長方形を描画する本当に助けが必要だ... - ページ 6

 
evillive:

では、どこに効果があるのでしょうか?TFではなく、すべてのバーに線を描画します。それとも、上の写真ではTF=H1なのでしょうか?

サイクルの各反復で限界と iが どうなるかを紙に書いて計算しなさい。

上に示した私の例は、私の理解では、決して説明されません。

ティック矢印は、ローソク足の影を結ぶ線と同様に、インジケーターバッファを使って描画することが可能です。

PERIOD_H;。H4期以下はすべて順調に描画されています。

i = 0;

Limit はデフォルトで外部変数 = 5。

extern int barsToProcess = 5; //--- 表示するピリオド(行)の数.

「ローソク足の影を結ぶ線と同様に、インジケーターバッファを使用してティックアローを描画することができます。"

私はこのように理解しています。

Limit]インデックスのバッファに、Arrayからhighの値が代入されます。

double Buf_High[Limit]=mqlRates[0].high。

すべてのバーで円を描く方法が理解できた。しかし、すべてのH4バーでそれを行う方法がわかりません。

 
Alex_Profit:

PERIOD_H;。H4期間以下は、すべて順調に描画されている。

i = 0;

Limitは初期値=5で外部変数です。

extern int barsToProcess = 5; //--- 表示される期間(行)の数.

「ローソク足の影を結ぶ線と同様に、インジケーターバッファを使用してティックアローを描画することができます。"

私はこのように理解しています。

Limit]インデックスのバッファに、Arrayからhighの値が代入されます。

double Buf_High[Limit]=mqlRates[0].high

すべてのバーで円を描く方法が理解できた。しかし、すべてのH4バーでそれを行う方法がわかりません。

i = 0 は最初だけで、次にi++ で、上限まで

初回起動時 limit=Bars-counted_bars=Bars-0=Bars.

この場合のfor ループは、理論的には0からチャート上のバーの本数まで数えるはずです。しかし!!!2番目のwhile ループはここで干渉し、iとlimitの両方を再計算しています。

なぜそうしなければならなかったのか、誰に教わったのか、理解できない......。

ここでは、bars - 100, barsToProcess = 5 と設定しました。

最初のインジケーター実行時には、counted_bars=0、まだカウントされていないため、limit=100となります。冒頭の ループを0から99まで100回実行することを意味します。

for ループの繰り返し。

1. i=0, limit=barsToProcess=5,while(i<5) - 線と刻みを描いた内部ループを0から4まで、i++ ごとに5回実行、終了時にwhile - i=5, limit=5と する。

2. i=5=limit・・・for ループ終了。

これだ!このインジケータは、次のティックまでそれ以上何もしません。ティックが来て、counted_bars=99, limit=Bars-counted_bars= 100-99=1.

for ループは1回だけ実行され、while ループは全く実行されない(if(limit>barsToProcess) という条件が満たされないため)。チャートからインジケータがアンロードさ れるか、タイムフレームが変更されるまで、一般的にはインジケータの再初期化まで継続します。

実際、このインジケータはチャートにロードされたときに一度だけ目盛りを描き、再初期化されるまでアイドル状態のままです。問題は、なぜそのような指標が必要なのか、ということです。スクリプトは1つのレスポンスを処理することができます。

 

コードを書き直しました。ループはすべて正しいようです。

緩衝材」の線引きの問題が残っている。

#property strict 

#property indicator_chart_window


extern int     Total_bars = 5;        //--- Кол-во отображаемых Элементов в истории


    //---  Глобальные переменные    

string Name_VLine;     //--- Имя Элементов

string Name_CHECK;     //--- Имя Элементов


MqlRates    mqlRates[1]; //Структура для хранения информации 


#property indicator_buffers 1

#property indicator_type1   DRAW_LINE   // тип графического построения - линия 

#property indicator_color1  clrRed      // цвет линии 

#property indicator_style1  STYLE_SOLID // стиль линии 

#property indicator_width1  1           // толщина линии 


double Buff_High[];

 

//+------------------------------------------------------------------+

int OnInit()

  {

     return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

{

  

     SetIndexBuffer(0,Buff_High);     

     SetIndexStyle(0,DRAW_LINE);     

     SetIndexStyle(0,DRAW_SECTION);

     

//+------------------------------------------------------------------+

int limit;                                //--- переменная  старт кол-во баров. Линии рисуем о по всем барам

int counted_bars = IndicatorCounted();     //--- перем counted_bars = функц.  Возвращает количество баров

   

if(counted_bars > 0) counted_bars --;      //--- последний посчитанный бар будет пересчитан 

  //--- основной цикл 

  limit = Bars - counted_bars;         

  for(int i = 0; i <= limit; i ++)

   {

     if(limit > Total_bars)              //--- Если кол-во баров на графике > Кол-ву выбранных элементов 

      {

       limit = Total_bars-1;              //--- тогда кол-во баров на графике = Кол-ву выбранных элементов

      }

      

   datetime t_Line = iTime(Symbol(),PERIOD_H4,i);         //--- В ПЕРЕМ t_Line Будет Присваиваться значение времени открытия бара

   CopyRates(_Symbol, PERIOD_H4, t_Line, 1, mqlRates);    //--- Структура для хранения информации 

         

   //+------------------------ Рисуем вертикальную линии -----------------------------------------------------+                 

   ObjectCreate (Name_VLine + " VLine" + DoubleToStr(i,0),OBJ_VLINE,0,t_Line,0);         //--- Создаём обьект вертикальную линию

   ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_STYLE,2);              //--- Со стилем

   ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_COLOR,DimGray);        //--- Со цветом  

   ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_WIDTH,0);              //--- С  толщиной

   ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_BACK,0);               //--- С типом отображения. Объект на заднем плане


   //--- кубики по хай (В место галочек нужно подставить кубики)

   ObjectCreate    (0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].high, t_Line,mqlRates[0].high);

   ObjectSetInteger(0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen); 

   

   //--- кубики по лоу (В место галочек нужно подставить кубики)

   ObjectCreate    (0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].low, t_Line,mqlRates[0].low);

   ObjectSetInteger(0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen); 


  // На ТФ Н4 линии рисуются по хайям,

  // При смене ТФ линия рисуется на растоянии параметра Total_bars. 

  

   //--- Заполнение буфера

   Buff_High[i] = mqlRates[0].high ;  

  

   }

    return(rates_total);

}

//+------------------------------------------------------------------+


 
evillive:

なぜそんなことをしたのか、誰に教わったのか、わからない......。

適当なインジケーターを見つけ、必要な断片が残るまで「分解」していきました。そして、コードの断片を組み立て、必要なものを手に入れました。こんな感じです。

"学習中"

 
Alex_Profit:

コードを書き直しました。ループはすべて正しいようです。

緩衝材」の線引きの問題が残っている。

コードを貼り付けるには、メッセージ編集ウィンドウのトップパネルにあるSRCボタンをクリックします。

線もオブジェクトで描く必要があるだろう(トレンド)、前の時間/価格を別の変数に格納し、2点目の座標として使用する。

目盛りを他の記号に置き換えるには -OBJ_ARROWと ARROW_CODE。

 
evillive:

コード挿入は、メッセージ編集ウィンドウの上部にあるSRCボタンで、空行を作らずにきれいに挿入されます。

線もオブジェクトで描く必要が あるだろう(トレンド)、前の時間/価格を別の変数に格納し、2点目の座標として使用する。

目盛りを他の記号に置き換えるには -OBJ_ARROWとARROW_CODE

気に入らない点

DRAW_SECTION

1

空でない線分値間の線分

 
AlexeyVik:

А чем не нравится

DRAW_SECTION

1

Отрезки между непустыми значениями линии

塗り方がわからない。

 
AlexeyVik:

何が気に入らないのか

DRAW_SECTION

1

空でない値の間の線分

エヴィルブ

線もオブジェクトで描く必要があるだろうし(トレンド)、前の時間/価格を別の変数に格納し、第二点の座標として使用する必要があるだろう。

発想がいいんです。うまくいったら試してみます。

実のところ、描く必要はないのです。ただ、ちゃんと動いてくれればいいんです。

 

Alex_Profit:

塗り方がわからない。

単にOnInit()の中で、代わりに

SetIndexStyle(0, DRAW_LINE)を設定します。

書く

SetIndexStyle(0, DRAW_SECTION)を設定します。

 

なぜか変化なし

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  
     SetIndexBuffer(0,Buff_High);     
     //SetIndexStyle(0,DRAW_LINE);     
     SetIndexStyle(0,DRAW_SECTION);