MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 440 1...433434435436437438439440441442443444445446447...1953 新しいコメント Vladislav Andruschenko 2018.01.30 10:01 #4391 STARIJ:マウスの動きを追跡することができます。 surollingという意味です)。 voron_026 2018.01.30 10:42 #4392 皆さん、ごきげんよう。上級者の時間軸で情報を分析する必要性がある。システムにはチャネルを構築 する条件があります。それは、ある数のバーの最大価格と最小価格を見つけることです。以下の方法で実装してみました。extern ENUM_TIMEFRAMES TimeFrameRZ = PERIOD_M15; //Период разворотной зоны extern ENUM_TIMEFRAMES TimeFrameIn = PERIOD_M5; //Период точки входа extern int ATR_period = 14; extern int UpLineSell = 7; extern int DownLineSell = 7; extern int UpLineBuy = 7; extern int DownLineBuy = 7; // Параметры разворотных свечей extern string Comment2 = "---------------------------------Параметры разворотных свечей------------------------------------------"; extern int Volotilnost = 20; // Диапазон цен для трех разворотных свечей (в пунктах) extern int MaxLineSell = 3; extern int MaxLineBuy = 3; bool SellPattern = false; bool BuyPattern = false; bool New_Bar = false; double UpLine_Sell = 0; double DownLine_Sell = 0; double UpLine_Buy = 0; double DownLine_Buy = 0; int i = 0, j = 0; int ULs = 0; int DLs = 0; int ULb = 0; int DLb = 0; double MassZone[2][10]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(Digits == 3 || Digits ==5 ) { Volotilnost *=10; UpLineSell *= 10; DownLineSell *= 10; UpLineBuy*= 10; DownLineBuy*= 10; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { RazvorotZona(); if(SellPattern == true) { if(ObjectCreate(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJ_HLINE,0,TimeCurrent(),UpLine_Sell)) { ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_COLOR,clrOrange);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Sell"+IntegerToString(ULs),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане } if(ObjectCreate(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJ_HLINE,0,TimeCurrent(),DownLine_Sell)) { ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_COLOR,clrMagenta);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Sell"+IntegerToString(DLs),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане } ULs++; DLs++; if(DLs >= MaxLineSell && ULs >= MaxLineSell) { ObjectDelete(ChartID(),"UpLine_Sell"+IntegerToString(ULs - MaxLineSell)); ObjectDelete(ChartID(),"DownLine_Sell"+IntegerToString(DLs - MaxLineSell)); } } if(BuyPattern == true) { if(ObjectCreate(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJ_HLINE,0,TimeCurrent(),UpLine_Buy)) { ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_COLOR,clrDeepSkyBlue);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"UpLine_Buy"+IntegerToString(ULb),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане } if(ObjectCreate(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJ_HLINE,0,TimeCurrent(),DownLine_Buy)) { ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_COLOR,clrBrown);//--- установим цвет прямоугольника ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника ObjectSetInteger(ChartID(),"DownLine_Buy"+IntegerToString(DLb),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане } ULb++; DLb++; if(ULb >= MaxLineBuy && DLb >= MaxLineBuy) { ObjectDelete(ChartID(),"UpLine_Buy"+IntegerToString(ULb - MaxLineBuy)); ObjectDelete(ChartID(),"DownLine_Buy"+IntegerToString(DLb - MaxLineBuy)); } } } //+------------------------------------------------------------------+ // Функция определения нового бара | //+------------------------------------------------------------------+ void Find_New_Bar() { datetime TimeBar0 = iTime(Symbol(),TimeFrameRZ,0); static datetime New_Time=0; // Время текущего бара New_Bar=false; // Нового бара нет if(New_Time != TimeBar0) // Сравниваем время { New_Time = TimeBar0; // Теперь время такое New_Bar = true; // Поймался новый бар } } //+------------------------------------------------------------------+ // Функция определения разворотной зоны | //+------------------------------------------------------------------+ void RazvorotZona() { Find_New_Bar(); double Open3= NormalizeDouble (iOpen(Symbol(), TimeFrameRZ,4),Digits); double Close3 = NormalizeDouble (iClose(Symbol(), TimeFrameRZ,4),Digits); double High3 = NormalizeDouble (iHigh(Symbol(), TimeFrameRZ,4),Digits); double Low3 = NormalizeDouble (iLow(Symbol(), TimeFrameRZ,4),Digits); //Параметры индикатора волотильности ATR для нахожденя относительно большой свечи перед перевернутым Молотом double ATR = iATR(Symbol(),TimeFrameRZ,ATR_period,1); SellPattern = false; BuyPattern = false; int bar1 = 1; int bar2 = 3; double Max, Min; Max = High[iHighest(NULL, TimeFrameRZ, MODE_HIGH, bar2, bar1)]; //1. Ищем High и Low на отрезке [bar1, bar2]. Min = Low[iLowest(NULL, TimeFrameRZ, MODE_LOW, bar2, bar1)]; if(NormalizeDouble((Max - Min) / Point, Digits) < Volotilnost && MathAbs(Close3-Open3) > 1.5*ATR) { if((Close3 > Open3) && New_Bar == true) { UpLine_Sell = Max; DownLine_Sell = Min; SellPattern = true; Print ("Идентифицирован паттерн"); Print ("Максимальная цена "+DoubleToStr(Max)); Print ("Минимальная цена "+DoubleToStr(Min)); } else {SellPattern = false;} if((Close3 < Open3) && New_Bar == true) { UpLine_Buy = Max; DownLine_Buy = Min; BuyPattern = true; Print ("Идентифицирован паттерн"); } else {BuyPattern = false;} } } しかし、この方法では、現在の作業時間枠M5からのバーを分析することになる。M15からbar1とbar2のパラメータを取得する必要がある どのように実装するのか? voron_026 2018.01.30 10:45 #4393 問題はこの辺にあるような気がします。 Max = High[iHighest(NULL, TimeFrameRZ, MODE_HIGH, bar2, bar1)]; //1. Ищем High и Low на отрезке [bar1, bar2]. Min = Low[iLowest(NULL, TimeFrameRZ, MODE_LOW, bar2, bar1)]; 誰が何を言うんだ? Konstantin Erin 2018.01.30 10:59 #4394 voron_026:問題はこの辺にあるような気がします。 誰が何を言うんだ?そうそう、時間帯を指定してね。 voron_026 2018.01.30 11:13 #4395 STARIJ:はい、正しい時間枠を指定してくださいだから言ったんだ... TimeFrameRZ = PERIOD_M15 それは外部変数です。 Juer 2018.01.30 11:13 #4396 double array[10]; array[0]=0.1;配列を宣言して、要素を埋めていく。 2行目でtypeエラーのない宣言が表示されるのはなぜですか? voron_026 2018.01.30 11:18 #4397 Juer:配列を宣言して、要素を埋めていく。 2行目でtypeエラーのない宣言が表示されるのはなぜですか?void OnTick()にコードを書けば、すべてうまくいきます。 または、void OnTick()の中で、array[0]=0.1; と記述します。 Artyom Trishkin 2018.01.30 11:37 #4398 Juer:配列を宣言して、要素を埋めていく。 2行目でtypeエラーのない宣言が表示されるのはなぜですか?グローバル変数の領域で配列を宣言していませんか? そして、例えば、値(コードの中で自分で記入するので、あらかじめ定義されている)を使って一気に宣言します。 double array[10]={0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}; ...あるいは、OnInit() や関数内で、配列に値を記入します。 ZZuretc 2018.01.30 12:11 #4399 ZigZagインジケータの値をEAに出力する方法を教えてください。その他はiMA, iStochastic, iWPR ...と書くと出力されます。ZigZagを手動で計算する方法は? Konstantin Erin 2018.01.30 12:19 #4400 ZZuretc: ZigZagインジケータの値をEAに出力する方法を教えてください。その他、iMA、iStochastic、iWPR ...と印刷されています。ZigZagを手動で計算する方法は?使用することを決定した?ZigZagの指標 値はどこでも0です。トップのみジグザグの値がトップの価格と同じになる。 鉄棒を輪切りにして通るのです。例を見る ファイル: Zig2fl.mq4 4 kb 1...433434435436437438439440441442443444445446447...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
マウスの動きを追跡することができます。
surollingという意味です)。皆さん、ごきげんよう。上級者の時間軸で情報を分析する必要性がある。
システムにはチャネルを構築 する条件があります。それは、ある数のバーの最大価格と最小価格を見つけることです。以下の方法で実装してみました。
しかし、この方法では、現在の作業時間枠M5からのバーを分析することになる。M15からbar1とbar2のパラメータを取得する必要がある
どのように実装するのか?
問題はこの辺にあるような気がします。
誰が何を言うんだ?
問題はこの辺にあるような気がします。
誰が何を言うんだ?
そうそう、時間帯を指定してね。
はい、正しい時間枠を指定してください
だから言ったんだ...
TimeFrameRZ = PERIOD_M15
それは外部変数です。配列を宣言して、要素を埋めていく。
2行目でtypeエラーのない宣言が表示されるのはなぜですか?
配列を宣言して、要素を埋めていく。
2行目でtypeエラーのない宣言が表示されるのはなぜですか?
void OnTick()にコードを書けば、すべてうまくいきます。
または、void OnTick()の中で、array[0]=0.1; と記述します。
配列を宣言して、要素を埋めていく。
2行目でtypeエラーのない宣言が表示されるのはなぜですか?
グローバル変数の領域で配列を宣言していませんか?
そして、例えば、値(コードの中で自分で記入するので、あらかじめ定義されている)を使って一気に宣言します。
...あるいは、OnInit() や関数内で、配列に値を記入します。
ZigZagインジケータの値をEAに出力する方法を教えてください。その他、iMA、iStochastic、iWPR ...と印刷されています。ZigZagを手動で計算する方法は?
使用することを決定した?ZigZagの指標 値はどこでも0です。トップのみジグザグの値がトップの価格と同じになる。
鉄棒を輪切りにして通るのです。例を見る