正方形や長方形を描画する本当に助けが必要だ... - ページ 6 12345678 新しいコメント Alex_Profit 2016.10.18 16:17 #51 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バーでそれを行う方法がわかりません。 Vitalie Postolache 2016.10.18 18:14 #52 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つのレスポンスを処理することができます。 初心者向け MQL4 言語カスタムインディケータ(パート 1) Growing Neural Gas: MQL5への実装 Alex_Profit 2016.10.19 03:53 #53 コードを書き直しました。ループはすべて正しいようです。緩衝材」の線引きの問題が残っている。#property strict #property indicator_chart_windowextern 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);}//+------------------------------------------------------------------+ ArrayIsSeries DRAW_NONE FileReadDouble Alex_Profit 2016.10.19 04:03 #54 evillive:なぜそんなことをしたのか、誰に教わったのか、わからない......。適当なインジケーターを見つけ、必要な断片が残るまで「分解」していきました。そして、コードの断片を組み立て、必要なものを手に入れました。こんな感じです。"学習中" Vitalie Postolache 2016.10.19 05:11 #55 Alex_Profit:コードを書き直しました。ループはすべて正しいようです。緩衝材」の線引きの問題が残っている。コードを貼り付けるには、メッセージ編集ウィンドウのトップパネルにあるSRCボタンをクリックします。線もオブジェクトで描く必要があるだろう(トレンド)、前の時間/価格を別の変数に格納し、2点目の座標として使用する。目盛りを他の記号に置き換えるには -OBJ_ARROWと ARROW_CODE。 Alexey Viktorov 2016.10.19 08:59 #56 evillive:コード挿入は、メッセージ編集ウィンドウの上部にあるSRCボタンで、空行を作らずにきれいに挿入されます。線もオブジェクトで描く必要が あるだろう(トレンド)、前の時間/価格を別の変数に格納し、2点目の座標として使用する。目盛りを他の記号に置き換えるには -OBJ_ARROWとARROW_CODE。気に入らない点DRAW_SECTION1 空でない線分値間の線分 Alex_Profit 2016.10.19 11:37 #57 AlexeyVik: А чем не нравитсяDRAW_SECTION1 Отрезки между непустыми значениями линии塗り方がわからない。 Alex_Profit 2016.10.19 11:41 #58 AlexeyVik:何が気に入らないのかDRAW_SECTION1 空でない値の間の線分エヴィルブ線もオブジェクトで描く必要があるだろうし(トレンド)、前の時間/価格を別の変数に格納し、第二点の座標として使用する必要があるだろう。発想がいいんです。うまくいったら試してみます。実のところ、描く必要はないのです。ただ、ちゃんと動いてくれればいいんです。 Alexey Viktorov 2016.10.19 11:54 #59 Alex_Profit:塗り方がわからない。単にOnInit()の中で、代わりに SetIndexStyle(0, DRAW_LINE)を設定します。書くSetIndexStyle(0, DRAW_SECTION)を設定します。 Alex_Profit 2016.10.19 13:50 #60 なぜか変化なし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); 12345678 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
では、どこに効果があるのでしょうか?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バーでそれを行う方法がわかりません。
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);
}
//+------------------------------------------------------------------+
なぜそんなことをしたのか、誰に教わったのか、わからない......。
適当なインジケーターを見つけ、必要な断片が残るまで「分解」していきました。そして、コードの断片を組み立て、必要なものを手に入れました。こんな感じです。
"学習中"
コードを書き直しました。ループはすべて正しいようです。
緩衝材」の線引きの問題が残っている。
コードを貼り付けるには、メッセージ編集ウィンドウのトップパネルにあるSRCボタンをクリックします。
線もオブジェクトで描く必要があるだろう(トレンド)、前の時間/価格を別の変数に格納し、2点目の座標として使用する。
目盛りを他の記号に置き換えるには -OBJ_ARROWと ARROW_CODE。
コード挿入は、メッセージ編集ウィンドウの上部にあるSRCボタンで、空行を作らずにきれいに挿入されます。
線もオブジェクトで描く必要が あるだろう(トレンド)、前の時間/価格を別の変数に格納し、2点目の座標として使用する。
目盛りを他の記号に置き換えるには -OBJ_ARROWとARROW_CODE。
気に入らない点
1
空でない線分値間の線分
А чем не нравится
1
Отрезки между непустыми значениями линии
塗り方がわからない。
何が気に入らないのか
1
空でない値の間の線分
線もオブジェクトで描く必要があるだろうし(トレンド)、前の時間/価格を別の変数に格納し、第二点の座標として使用する必要があるだろう。
発想がいいんです。うまくいったら試してみます。
実のところ、描く必要はないのです。ただ、ちゃんと動いてくれればいいんです。
Alex_Profit:
塗り方がわからない。
単にOnInit()の中で、代わりに
SetIndexStyle(0, DRAW_LINE)を設定します。
書く
SetIndexStyle(0, DRAW_SECTION)を設定します。
なぜか変化なし