MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 3 12345678910...1953 新しいコメント mila.com 2016.11.11 03:42 #21 Artyom Trishkin: もっと深いところまで見ないと...。 もっと深く、どこにあるんだろう? 新しいインジケータで、すべての試みは、ハングアップにつながる。 そして、変化のないインジケーターで、一瞬のヒヤッとがある。 その解決策は何でしょうか? Artyom Trishkin 2016.11.11 03:58 #22 mila.com: もっと深く、どこにあるんだろう? 新しいインジケータを使用して、すべての試行がハングアップする結果となりました。 そして、変化のないインジケーターでは、一瞬のブレーキがかかる。 その解決策は何でしょうか? あなたのインジケータでは、特に他のカスタムインジケータのデータを使用するのではなく、任意の次元のフラクタル検索を行い、そのようなフラクタル検索用の関数を作成し、それを使用して作業してください。 mila.com 2016.11.11 04:05 #23 Artyom Trishkin: そのようなフラクタルを見つけて、それを扱う機能を作ればいいのです。 あなたにとって、それは簡単なことなのです)。 が、私にとっては無理難題です。 こんな機能? bool isDnFractal(int bar,int max,const double &low[]) {//--- for(int i=1; i<=max; i++) { if(i<=leftSide && low[bar]>low[bar-i]) return(false); if(i<=rightSide && low[bar]>=low[bar+i]) return(false); }//--- return(true); }下位フラクタル である。どのように使うのですか? Artyom Trishkin 2016.11.11 06:19 #24 mila.com: あなたにとっては、その方がやりやすいのです)。 でも、私にとっては無理難題なんです。 そのインジケーターの機能を私のインジケーターに移植するにはどうしたらいいでしょうか? bool isDnFractal(int bar,int max,const double &low[]) {//--- for(int i=1; i<=max; i++) { if(i<=leftSide && low[bar]>low[bar-i]) return(false); if(i<=rightSide && low[bar]>=low[bar+i]) return(false); }//--- return(true); }さて、必要なのは、必要なバー上のフラクタルの価格を返すことです。ここでは、簡単なインジケータを作りました。これは、そこから取り出して自分のところで使える2つの関数を持っています - 私は特別にそれらを関数として整理しました - 無効な値に対するチェックを備えています。//+------------------------------------------------------------------+//| iFreeNumFractals.mq4 |//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |//| https://login.mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"#property link "https://login.mql5.com/ru/users/artmedia70"#property version "1.00"#property strict#property indicator_chart_window#property indicator_buffers 2#property indicator_plots 2//--- plot UpperFractal#property indicator_label1 "UpperFractal"#property indicator_type1 DRAW_ARROW#property indicator_color1 clrRed#property indicator_style1 STYLE_SOLID#property indicator_width1 1//--- plot LowerFractal#property indicator_label2 "LowerFractal"#property indicator_type2 DRAW_ARROW#property indicator_color2 clrSteelBlue#property indicator_style2 STYLE_SOLID#property indicator_width2 1//--- input parametersinput int LeftNum=2; // Количество баров слеваint leftNum; // Количество баров слеваinput int RightNum=2; // Количество баров справаint rightNum; // Количество баров справа//--- indicator buffersdouble BufferUpperFractal[];double BufferLowerFractal[];//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int OnInit() {//--- indicator buffers mapping SetIndexBuffer(0,BufferUpperFractal); SetIndexBuffer(1,BufferLowerFractal);//--- setting a code from the Wingdings charset as the property of PLOT_ARROW PlotIndexSetInteger(0,PLOT_ARROW,159); PlotIndexSetInteger(1,PLOT_ARROW,159); SetIndexArrow(0,217); SetIndexArrow(1,218);//--- leftNum=(LeftNum<1?1:LeftNum); rightNum=(RightNum<1?1:RightNum);//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+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[]) {//--- if(rates_total<leftNum+rightNum) return(0); int limit=rates_total-prev_calculated; if(limit>0) { ArrayInitialize(BufferUpperFractal,0.0); ArrayInitialize(BufferUpperFractal,0.0); limit=rates_total-leftNum-1; } //--- for(int i=limit; i>rightNum; i--) { if(GetFreeUpperFractal(i,limit,high,leftNum,rightNum)>0) BufferUpperFractal[i]=high[i]; if(GetFreeLowerFractal(i,limit,low ,leftNum,rightNum)>0) BufferLowerFractal[i]=low[i]; }//--- return value of prev_calculated for next call return(rates_total); }//+----------------------------------------------------------------------------+double GetFreeLowerFractal(int shift,const int limit,const double &low[],int left_dimension=2,int right_dimension=2) { if(left_dimension<1) left_dimension=1; if(right_dimension<1) right_dimension=1; if(shift-right_dimension<1 || shift+left_dimension>limit-1) return(-1); for(int i=shift; i>shift-right_dimension; i--) if(low[i]>low[i-1]) return(-1); for(int i=shift; i<shift+left_dimension; i++) if(low[i]>low[i+1]) return(-1); return(low[shift]);} //+----------------------------------------------------------------------------+double GetFreeUpperFractal(int shift,const int limit,const double &high[],int left_dimension=2,int right_dimension=2) { if(left_dimension<1) left_dimension=1; if(right_dimension<1) right_dimension=1; if(shift-right_dimension<1 || shift+left_dimension>limit-1) return(-1); for(int i=shift; i>=shift-right_dimension; i--) if(high[i]<high[i-1]) return(-1); for(int i=shift; i<=shift+left_dimension; i++) if(high[i]<high[i+1]) return(-1); return(high[shift]);} //+----------------------------------------------------------------------------+ Any questions from newcomers 初心者の方からの質問 MQL5 MT5 MetaTrader Questions from Beginners MQL5 Artyom Trishkin 2016.11.11 06:43 #25 任意のフラクタル値を得るための関数を指標から切り離すために、配列high[]とlow[]と限界値を参照渡ししないようにします。今回のコードはMQL5に近いので、High[]、Low[]、iHigh()、iLow()関数はお断りすることにします。このインジケータではこのように表示されます。//+------------------------------------------------------------------+//| iFreeNumFractals.mq4 |//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |//| https://login.mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"#property link "https://login.mql5.com/ru/users/artmedia70"#property version "1.00"#property strict#property indicator_chart_window#property indicator_buffers 2#property indicator_plots 2//--- plot UpperFractal#property indicator_label1 "UpperFractal"#property indicator_type1 DRAW_ARROW#property indicator_color1 clrRed#property indicator_style1 STYLE_SOLID#property indicator_width1 1//--- plot LowerFractal#property indicator_label2 "LowerFractal"#property indicator_type2 DRAW_ARROW#property indicator_color2 clrSteelBlue#property indicator_style2 STYLE_SOLID#property indicator_width2 1//--- input parametersinput int LeftNum=2; // Количество баров слеваint leftNum; // Количество баров слеваinput int RightNum=2; // Количество баров справаint rightNum; // Количество баров справа//--- indicator buffersdouble BufferUpperFractal[];double BufferLowerFractal[];//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int OnInit() {//--- indicator buffers mapping SetIndexBuffer(0,BufferUpperFractal); SetIndexBuffer(1,BufferLowerFractal);//--- setting a code from the Wingdings charset as the property of PLOT_ARROW // PlotIndexSetInteger(0,PLOT_ARROW,217); // PlotIndexSetInteger(1,PLOT_ARROW,218); SetIndexArrow(0,217); SetIndexArrow(1,218);//--- leftNum=(LeftNum<1?1:LeftNum); rightNum=(RightNum<1?1:RightNum);//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+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[]) {//--- if(rates_total<leftNum+rightNum) return(0); int limit=rates_total-prev_calculated; if(limit>0) { ArrayInitialize(BufferUpperFractal,0.0); ArrayInitialize(BufferUpperFractal,0.0); limit=rates_total-leftNum-1; } //--- for(int i=limit; i>rightNum; i--) { if(GetFreeUpperFractal(Symbol(),PERIOD_CURRENT,i,leftNum,rightNum)>0) BufferUpperFractal[i]=high[i]; if(GetFreeLowerFractal(Symbol(),PERIOD_CURRENT,i,leftNum,rightNum)>0) BufferLowerFractal[i]=low[i]; }//--- return value of prev_calculated for next call return(rates_total); }//+----------------------------------------------------------------------------+double GetFreeLowerFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) { int bars=Bars(symbol_name,timeframe); if(left_dimension<1) left_dimension=1; if(right_dimension<1) right_dimension=1; if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1); for(int i=shift; i>shift-right_dimension; i--) if(GetPriceLow(symbol_name,timeframe,i)>GetPriceLow(symbol_name,timeframe,i-1)) return(-1); for(int i=shift; i<shift+left_dimension; i++) if(GetPriceLow(symbol_name,timeframe,i)>GetPriceLow(symbol_name,timeframe,i+1)) return(-1); return(GetPriceLow(symbol_name,timeframe,shift));} //+----------------------------------------------------------------------------+double GetFreeUpperFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) { int bars=Bars(symbol_name,timeframe); if(left_dimension<1) left_dimension=1; if(right_dimension<1) right_dimension=1; if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1); for(int i=shift; i>=shift-right_dimension; i--) if(GetPriceHigh(symbol_name,timeframe,i)<GetPriceHigh(symbol_name,timeframe,i-1)) return(-1); for(int i=shift; i<=shift+left_dimension; i++) if(GetPriceHigh(symbol_name,timeframe,i)<GetPriceHigh(symbol_name,timeframe,i+1)) return(-1); return(GetPriceHigh(symbol_name,timeframe,shift));} //+----------------------------------------------------------------------------+double GetPriceHigh(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){ double array[1]; if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return(array[0]); return(-1);}//+----------------------------------------------------------------------------+double GetPriceLow(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){ double array[1]; if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return(array[0]); return(-1);}//+----------------------------------------------------------------------------+ ただし、関数GetPriceHigh()とGetPriceLow()からは-1もチェックする必要があります。 Any questions from newcomers 初心者の方からの質問 MQL5 MT5 MetaTrader Questions from Beginners MQL5 strongflex 2016.11.11 08:18 #26 こんにちは、15分足を使って20分ごとに値を確認するEAの作り方をアドバイスください。例えば、9-20、9-40でクロスオーバーRSIが続き、20分以内にレベルが交差した場合、価格の変化をチェックします。これを直さないといけないんです。if (Hour()==9 && (Minute() == 20) && (RSI>70)) Price2==Bid; { if (Hour()==9 && (Minute() == 40) && (Bid<Price2)) { ticket=OrderSend(Symbol(),OP_SELL, Lts, Bid, SP,0,0, NULL, Magic, 0, Blue); return(0); } }つまり、9-20でRSIがクロスしたとします。9-20の価格をEAに記憶させ、9-40で9-20の価格と相対する過去20分間をチェックするようにしたい。下がっていれば、ショートを開くことになる。ありがとうございました。 初心者の方からの質問 MQL4 MT4 MetaTrader Questions from Beginners MQL4 Any questions from newcomers Artyom Trishkin 2016.11.11 10:09 #27 strongflex:こんにちは、15分足を使って20分ごとに値を確認するEAの作り方をアドバイスください。例えば、9-20、9-40でクロスオーバーRSIが続き、20分後にレベルがクロスしていれば、価格変化を確認します。これを直さないといけないんです。if (Hour()==9 && (Minute() == 20) && (RSI>70)) Price2==Bid; { if (Hour()==9 && (Minute() == 40) && (Bid<Price2)) { ticket=OrderSend(Symbol(),OP_SELL, Lts, Bid, SP,0,0, NULL, Magic, 0, Blue); return(0); } }つまり、9-20でRSIがクロスしたとします。9-20の価格をEAに記憶させ、9-40で9-20の価格と相対する過去20分間をチェックするようにしたい。下がっていれば、ショートを開くことになる。ありがとうございました。:)Expert Advisorを9.22で実行するとどうなるか?システムや端末に障害が発生した場合は?価格が分からなくなる。つまり、このチェックの時間が来たら、20分前のことを探さなければならないのです。分単位が20の倍数以上になる時間が来た--20分前のバーのRSIの状態を確認する。適切なクロスオーバーがあれば、計画通りに進める......。しかし、M15では、交差する正確な時間や正確な価格を 判断することはできませんが、M1の価格を見れば、少なくとも15倍以上の精度で判断することができます。 strongflex 2016.11.11 13:15 #28 Artyom Trishkin::)9.22でEAを動かすとどうなる?システムや端末に障害が発生した場合はどうするのですか?価格が分からなくなる。つまり、このチェックが行われたときに、20分前のものを探さなければならないのです。分単位が20の倍数以上になる時間が来た--20分前のバーのRSIの状態を確認する。それが目的の交差点であれば、計画通りに進む...。しかし、M15では、交差する正確な時間や正確な価格を 判断することはできませんが、M1の価格を見れば、少なくとも15倍以上の精度で判断することができます。 よし、俺には無理だと思った)) みんな、誰かこの部分のコードを書ける人? 1000ルーブル払うよ。 Alekseu Fedotov 2016.11.11 13:35 #29 strongflex: わかりました、私が対応できないことはわかりました))) 誰かこの部分のコードを書いてくれる人はいませんか? 1000ルーブル払いますから。double rci20 = iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,20);//RCI 20 минут назад. Comment("RSI = ",rci20);で、1000はどこだ? (なんちゃって) strongflex 2016.11.11 13:53 #30 Alekseu Fedotov:double rci20 = iRSI(NULL,PERIOD_M1,14,PRICE_CLOSE,20);//RCI 20 минут назад. Comment("RSI = ",rci20);で、1000はどこだ? 冗談 RSIは15分である必要があります。例えば、10-20の時点で70レベルより下から上へのクロスがあった場合、その価格を記憶し、10-40の時点で10-20の時点より価格が低ければショートをオープンするようにします。 12345678910...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
もっと深いところまで見ないと...。
もっと深く、どこにあるんだろう?
新しいインジケータで、すべての試みは、ハングアップにつながる。
そして、変化のないインジケーターで、一瞬のヒヤッとがある。
その解決策は何でしょうか?
もっと深く、どこにあるんだろう?
新しいインジケータを使用して、すべての試行がハングアップする結果となりました。
そして、変化のないインジケーターでは、一瞬のブレーキがかかる。
その解決策は何でしょうか?
そのようなフラクタルを見つけて、それを扱う機能を作ればいいのです。
あなたにとって、それは簡単なことなのです)。
が、私にとっては無理難題です。
こんな機能?
{
//---
for(int i=1; i<=max; i++) {
if(i<=leftSide && low[bar]>low[bar-i]) return(false);
if(i<=rightSide && low[bar]>=low[bar+i]) return(false);
}
//---
return(true);
}
下位フラクタル である。
どのように使うのですか?
あなたにとっては、その方がやりやすいのです)。
でも、私にとっては無理難題なんです。
そのインジケーターの機能を私のインジケーターに移植するにはどうしたらいいでしょうか?
{
//---
for(int i=1; i<=max; i++) {
if(i<=leftSide && low[bar]>low[bar-i]) return(false);
if(i<=rightSide && low[bar]>=low[bar+i]) return(false);
}
//---
return(true);
}
さて、必要なのは、必要なバー上のフラクタルの価格を返すことです。ここでは、簡単なインジケータを作りました。これは、そこから取り出して自分のところで使える2つの関数を持っています - 私は特別にそれらを関数として整理しました - 無効な値に対するチェックを備えています。
//| iFreeNumFractals.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//--- plot UpperFractal
#property indicator_label1 "UpperFractal"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot LowerFractal
#property indicator_label2 "LowerFractal"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrSteelBlue
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- input parameters
input int LeftNum=2; // Количество баров слева
int leftNum; // Количество баров слева
input int RightNum=2; // Количество баров справа
int rightNum; // Количество баров справа
//--- indicator buffers
double BufferUpperFractal[];
double BufferLowerFractal[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,BufferUpperFractal);
SetIndexBuffer(1,BufferLowerFractal);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
PlotIndexSetInteger(0,PLOT_ARROW,159);
PlotIndexSetInteger(1,PLOT_ARROW,159);
SetIndexArrow(0,217);
SetIndexArrow(1,218);
//---
leftNum=(LeftNum<1?1:LeftNum);
rightNum=(RightNum<1?1:RightNum);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[])
{
//---
if(rates_total<leftNum+rightNum) return(0);
int limit=rates_total-prev_calculated;
if(limit>0) {
ArrayInitialize(BufferUpperFractal,0.0);
ArrayInitialize(BufferUpperFractal,0.0);
limit=rates_total-leftNum-1;
}
//---
for(int i=limit; i>rightNum; i--) {
if(GetFreeUpperFractal(i,limit,high,leftNum,rightNum)>0) BufferUpperFractal[i]=high[i];
if(GetFreeLowerFractal(i,limit,low ,leftNum,rightNum)>0) BufferLowerFractal[i]=low[i];
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+----------------------------------------------------------------------------+
double GetFreeLowerFractal(int shift,const int limit,const double &low[],int left_dimension=2,int right_dimension=2) {
if(left_dimension<1) left_dimension=1;
if(right_dimension<1) right_dimension=1;
if(shift-right_dimension<1 || shift+left_dimension>limit-1) return(-1);
for(int i=shift; i>shift-right_dimension; i--) if(low[i]>low[i-1]) return(-1);
for(int i=shift; i<shift+left_dimension; i++) if(low[i]>low[i+1]) return(-1);
return(low[shift]);
}
//+----------------------------------------------------------------------------+
double GetFreeUpperFractal(int shift,const int limit,const double &high[],int left_dimension=2,int right_dimension=2) {
if(left_dimension<1) left_dimension=1;
if(right_dimension<1) right_dimension=1;
if(shift-right_dimension<1 || shift+left_dimension>limit-1) return(-1);
for(int i=shift; i>=shift-right_dimension; i--) if(high[i]<high[i-1]) return(-1);
for(int i=shift; i<=shift+left_dimension; i++) if(high[i]<high[i+1]) return(-1);
return(high[shift]);
}
//+----------------------------------------------------------------------------+
任意のフラクタル値を得るための関数を指標から切り離すために、配列high[]とlow[]と限界値を参照渡ししないようにします。
今回のコードはMQL5に近いので、High[]、Low[]、iHigh()、iLow()関数はお断りすることにします。このインジケータではこのように表示されます。
//| iFreeNumFractals.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
//--- plot UpperFractal
#property indicator_label1 "UpperFractal"
#property indicator_type1 DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- plot LowerFractal
#property indicator_label2 "LowerFractal"
#property indicator_type2 DRAW_ARROW
#property indicator_color2 clrSteelBlue
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
//--- input parameters
input int LeftNum=2; // Количество баров слева
int leftNum; // Количество баров слева
input int RightNum=2; // Количество баров справа
int rightNum; // Количество баров справа
//--- indicator buffers
double BufferUpperFractal[];
double BufferLowerFractal[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,BufferUpperFractal);
SetIndexBuffer(1,BufferLowerFractal);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
// PlotIndexSetInteger(0,PLOT_ARROW,217);
// PlotIndexSetInteger(1,PLOT_ARROW,218);
SetIndexArrow(0,217);
SetIndexArrow(1,218);
//---
leftNum=(LeftNum<1?1:LeftNum);
rightNum=(RightNum<1?1:RightNum);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[])
{
//---
if(rates_total<leftNum+rightNum) return(0);
int limit=rates_total-prev_calculated;
if(limit>0) {
ArrayInitialize(BufferUpperFractal,0.0);
ArrayInitialize(BufferUpperFractal,0.0);
limit=rates_total-leftNum-1;
}
//---
for(int i=limit; i>rightNum; i--) {
if(GetFreeUpperFractal(Symbol(),PERIOD_CURRENT,i,leftNum,rightNum)>0) BufferUpperFractal[i]=high[i];
if(GetFreeLowerFractal(Symbol(),PERIOD_CURRENT,i,leftNum,rightNum)>0) BufferLowerFractal[i]=low[i];
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+----------------------------------------------------------------------------+
double GetFreeLowerFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) {
int bars=Bars(symbol_name,timeframe);
if(left_dimension<1) left_dimension=1;
if(right_dimension<1) right_dimension=1;
if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1);
for(int i=shift; i>shift-right_dimension; i--) if(GetPriceLow(symbol_name,timeframe,i)>GetPriceLow(symbol_name,timeframe,i-1)) return(-1);
for(int i=shift; i<shift+left_dimension; i++) if(GetPriceLow(symbol_name,timeframe,i)>GetPriceLow(symbol_name,timeframe,i+1)) return(-1);
return(GetPriceLow(symbol_name,timeframe,shift));
}
//+----------------------------------------------------------------------------+
double GetFreeUpperFractal(const string symbol_name,ENUM_TIMEFRAMES timeframe,int shift,int left_dimension=2,int right_dimension=2) {
int bars=Bars(symbol_name,timeframe);
if(left_dimension<1) left_dimension=1;
if(right_dimension<1) right_dimension=1;
if(shift-right_dimension<1 || shift+left_dimension>bars-1) return(-1);
for(int i=shift; i>=shift-right_dimension; i--) if(GetPriceHigh(symbol_name,timeframe,i)<GetPriceHigh(symbol_name,timeframe,i-1)) return(-1);
for(int i=shift; i<=shift+left_dimension; i++) if(GetPriceHigh(symbol_name,timeframe,i)<GetPriceHigh(symbol_name,timeframe,i+1)) return(-1);
return(GetPriceHigh(symbol_name,timeframe,shift));
}
//+----------------------------------------------------------------------------+
double GetPriceHigh(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
double array[1];
if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
return(-1);
}
//+----------------------------------------------------------------------------+
double GetPriceLow(const string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
double array[1];
if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
return(-1);
}
//+----------------------------------------------------------------------------+
Price2==Bid;
{
if (Hour()==9 && (Minute() == 40) && (Bid<Price2))
{
ticket=OrderSend(Symbol(),OP_SELL, Lts, Bid, SP,0,0, NULL, Magic, 0, Blue);
return(0);
}
}
Price2==Bid;
{
if (Hour()==9 && (Minute() == 40) && (Bid<Price2))
{
ticket=OrderSend(Symbol(),OP_SELL, Lts, Bid, SP,0,0, NULL, Magic, 0, Blue);
return(0);
}
}
:)
Expert Advisorを9.22で実行するとどうなるか?
システムや端末に障害が発生した場合は?価格が分からなくなる。
つまり、このチェックの時間が来たら、20分前のことを探さなければならないのです。分単位が20の倍数以上になる時間が来た--20分前のバーのRSIの状態を確認する。適切なクロスオーバーがあれば、計画通りに進める......。
しかし、M15では、交差する正確な時間や正確な価格を 判断することはできませんが、M1の価格を見れば、少なくとも15倍以上の精度で判断することができます。
:)
9.22でEAを動かすとどうなる?
システムや端末に障害が発生した場合はどうするのですか?価格が分からなくなる。
つまり、このチェックが行われたときに、20分前のものを探さなければならないのです。分単位が20の倍数以上になる時間が来た--20分前のバーのRSIの状態を確認する。それが目的の交差点であれば、計画通りに進む...。
しかし、M15では、交差する正確な時間や正確な価格を 判断することはできませんが、M1の価格を見れば、少なくとも15倍以上の精度で判断することができます。
わかりました、私が対応できないことはわかりました))) 誰かこの部分のコードを書いてくれる人はいませんか? 1000ルーブル払いますから。
Comment("RSI = ",rci20);
で、1000はどこだ?
(なんちゃって)
Comment("RSI = ",rci20);
で、1000はどこだ?
冗談