MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 21 1...141516171819202122232425262728...1953 新しいコメント 削除済み 2016.11.29 12:09 #201 Renat Akhtyamov:ここで考慮すべきなのは、ループブロックi==xの後にこの場合、Array[i] after for(...){} は配列オーバーランエラーを返し、それで終了です。例えば、コードの後半で変数jを指定し、誤ってそれをiと呼んでしまった場合などです。あるいは、配列のインデックス[1]の代わりに[i]などと書いてもよいでしょう。 ここに書いたのは、特定のコードについてではなく、それがどのようなものであるかの一例です。配列の境界がなく、エラーを発見するのが難しく、その場所を特定するために何分も貴重な時間を費やすことになることも十分あり得ます。 Vitaly Muzichenko 2016.11.29 22:00 #202 (ラグが出始めたのでヒントが欲しい)こんな構造もあるんですね。int RangeBar = 10; HighRange = iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,RangeBar,1)); LowRange = iLow(symbol,0,iLowest(symbol,0,MODE_LOW,RangeBar,1));N本のローソク足で、レンジの高値・安値を 求めます。質問:同じHigh/Lowでも、影ではなく、体で探す方法はありますか? Artyom Trishkin 2016.11.29 22:13 #203 Vitaly Muzichenko:(ラグが出始めたのでヒントが欲しい)こんな構造もあるんですね。int RangeBar = 10; HighRange = iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,RangeBar,1)); LowRange = iLow(symbol,0,iLowest(symbol,0,MODE_LOW,RangeBar,1));N本のローソク足で、レンジの高値・安値を 求めます。質問:同じHigh/Lowでも、影ではなく、体で探す方法はありますか? ローソク足の上部のfmax(Open[i],Close[i])と下部のfmin(Open[i],Close[i])を求めたいのですが。 Vitaly Muzichenko 2016.11.29 22:19 #204 Artyom Trishkin: トップはfmax(Open[i],Close[i])、ボトムはfmin(Open[i],Close[i])を探す必要があります。つまり、High/Lowを探す2行ではなく、ループLoopをする?HighRange =iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,RangeBar,1))。LowRange =iLow(シンボル,0,iLowest(シンボル,0,MODE_LOW,RangeBar,1))これはインジケータではなくEAに必要で、EAでは正常に動作するのですが、ボディでどうやって範囲を求めるのか......それが思いつきません。 Artyom Trishkin 2016.11.29 23:10 #205 Vitaly Muzichenko:つまり、High/Lowを探す2行ではなく、ループLoopをする?HighRange =iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,RangeBar,1))。LowRange =iLow(symbol,0,iLowest(symbol,0,MODE_LOW,RangeBar,1));インジケータではなくExpert Advisorで必要なのですが、Expert Advisorでは正常に動作するのですが、bodyによる範囲の求め方がわかりません。テストスクリプトを投げてみました。不正確かもしれません、私は作業していません。ぜひとも解明してほしい。//+------------------------------------------------------------------+//| sFindRangeByCandlesBody.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 script_show_inputs//--- input parametersinput int Begin=1; // Бар начала диапазона поискаinput int RangeBars=20; // Диапазон поиска//---int bars=Bars(Symbol(),PERIOD_CURRENT);int begin=(Begin<0?0:Begin>bars-3?bars-3:Begin);int rangeBars=(RangeBars<2?2: RangeBars>bars-begin?bars-begin: RangeBars); // Диапазон поиска//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart() {//--- MqlRates array[]; double high=0, low=0; int highest=-1, lowest=-1; if(CopyRates(Symbol(),PERIOD_CURRENT,begin,rangeBars,array)>0) { ArraySetAsSeries(array,true); high=GetHighestValue(begin,array,highest); low=GetLowestValue(begin,array,lowest); } Print("High=",DoubleToString(high,Digits()),", Highest=",highest,", Low=",DoubleToString(low,Digits()),", Lowest=",lowest); }//+------------------------------------------------------------------+double GetHighestValue(int bar_begin, MqlRates &array[], int &bar_highest){ int sz=ArraySize(array); if(sz==0) return(-1); double high=DBL_MIN; bar_highest=-1; for(int i=0; i<sz; i++) { double value=fmax(array[i].open,array[i].close); if(value>high) { high=value; bar_highest=bar_begin+i; } } return(high);}//+------------------------------------------------------------------+double GetLowestValue(int bar_begin, MqlRates &array[], int &bar_lowest){ int sz=ArraySize(array); if(sz==0) return(-1); double low=DBL_MAX; bar_lowest=-1; for(int i=0; i<sz; i++) { double value=fmin(array[i].open,array[i].close); if(value<low) { low=value; bar_lowest=bar_begin+i; } } return(low);}//+------------------------------------------------------------------+ 何か質問があれば聞いてください... Any questions from newcomers 初心者の方からの質問 MQL5 MT5 MetaTrader question Regarding reading history Vitaly Muzichenko 2016.11.29 23:33 #206 Artyom Trishkin:テストスクリプトを組んでみました。その場で書いたので不正確な点があるかもしれません。コツをつかんでほしいですね。//+------------------------------------------------------------------+//| sFindRangeByCandlesBody.mq4 |//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |//| https://login.mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+...//+------------------------------------------------------------------+ 何かあったら聞いてください...ありがとうございます!効果抜群ですPS.これって5でも使えるんでしょ? Artyom Trishkin 2016.11.29 23:43 #207 Vitaly Muzichenko:ありがとうございます!効果抜群ですPS.これって、5でも使えるんですね? ええ、クロスプラットフォームのコードに挑戦しています。あるいは5thのための最小限の改造で。 giannis1386 2016.11.30 05:15 #208 売り(Slevel)のストップロスを 追加するのを手伝ってください。int start(){//+--------------------------------------------------------------------+//| -= stop loss в без убыток =- |//+--------------------------------------------------------------------+bool result;double stop;int cmd,error;for(int i=0;i<OrdersTotal();i++){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderProfit()>pOPCS){ cmd=OrderType();double blevel=OrderStopLoss()<Bid-Point*TS;double slevel=OrderStopLoss()>Ask+Point*TS;//---if(cmd==OP_BUY || cmd==OP_SELL){while(true){if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;else stop=Ask+Point*TS; result=OrderModify(OrderTicket(),OrderOpenPrice(),stop,0,0,Orange);if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }else error=0;if(error==135) RefreshRates();else break;}}}} Any questions from newcomers help me please , Close Function on Strategy Alexey Viktorov 2016.11.30 07:19 #209 Artyom Trishkin:テストスクリプトを添付します。不正確かもしれません、手を動かしていないのです。ぜひ理解してほしい。何か質問があれば...アルテムさんには申し訳ないのですが、この問題の解決策をもっとシンプルに示したいのです double openCandle[], closeCandle[]; CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle); CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle); double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]); double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);皆さんもコードに書いて、必要なチェックを入れていただければと思います。mql4、mql5ともに機能は同じです。 Artyom Trishkin 2016.11.30 07:31 #210 Alexey Viktorov:Artemさん、申し訳ありませんが、この問題に対してよりシンプルな解決策を示したいのです double openCandle[], closeCandle[]; CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle); CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle); double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]); double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);皆さんもコードに書いて、必要なチェックを入れていただければと思います。mql4、mql5ともに機能は同じです。О!ありがとうございます。朝、自分で当てたことがない...。たしかに、アレイが埋まっていないかチェックする必要がありますね。4倍では見たことがありませんし、5倍では過去の データがないため、初回では埋まらないことが多いようです。ZS もっと寝たほうがいい。思考がその方向に働く。 1...141516171819202122232425262728...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ここで考慮すべきなのは、ループブロックi==xの後に
この場合、Array[i] after for(...){} は配列オーバーランエラーを返し、それで終了です。
(ラグが出始めたのでヒントが欲しい)
こんな構造もあるんですね。
HighRange = iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,RangeBar,1));
LowRange = iLow(symbol,0,iLowest(symbol,0,MODE_LOW,RangeBar,1));
N本のローソク足で、レンジの高値・安値を 求めます。
質問:同じHigh/Lowでも、影ではなく、体で探す方法はありますか?
(ラグが出始めたのでヒントが欲しい)
こんな構造もあるんですね。
HighRange = iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,RangeBar,1));
LowRange = iLow(symbol,0,iLowest(symbol,0,MODE_LOW,RangeBar,1));
N本のローソク足で、レンジの高値・安値を 求めます。
質問:同じHigh/Lowでも、影ではなく、体で探す方法はありますか?
トップはfmax(Open[i],Close[i])、ボトムはfmin(Open[i],Close[i])を探す必要があります。
つまり、High/Lowを探す2行ではなく、ループLoopをする?
HighRange =iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,RangeBar,1))。
LowRange =iLow(シンボル,0,iLowest(シンボル,0,MODE_LOW,RangeBar,1))これはインジケータではなくEAに必要で、EAでは正常に動作するのですが、ボディでどうやって範囲を求めるのか......それが思いつきません。
つまり、High/Lowを探す2行ではなく、ループLoopをする?
HighRange =iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,RangeBar,1))。
LowRange =iLow(symbol,0,iLowest(symbol,0,MODE_LOW,RangeBar,1));インジケータではなくExpert Advisorで必要なのですが、Expert Advisorでは正常に動作するのですが、bodyによる範囲の求め方がわかりません。
テストスクリプトを投げてみました。不正確かもしれません、私は作業していません。ぜひとも解明してほしい。
//| sFindRangeByCandlesBody.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 script_show_inputs
//--- input parameters
input int Begin=1; // Бар начала диапазона поиска
input int RangeBars=20; // Диапазон поиска
//---
int bars=Bars(Symbol(),PERIOD_CURRENT);
int begin=(Begin<0?0:Begin>bars-3?bars-3:Begin);
int rangeBars=(RangeBars<2?2:
RangeBars>bars-begin?bars-begin:
RangeBars); // Диапазон поиска
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
MqlRates array[];
double high=0, low=0;
int highest=-1, lowest=-1;
if(CopyRates(Symbol(),PERIOD_CURRENT,begin,rangeBars,array)>0) {
ArraySetAsSeries(array,true);
high=GetHighestValue(begin,array,highest);
low=GetLowestValue(begin,array,lowest);
}
Print("High=",DoubleToString(high,Digits()),", Highest=",highest,", Low=",DoubleToString(low,Digits()),", Lowest=",lowest);
}
//+------------------------------------------------------------------+
double GetHighestValue(int bar_begin, MqlRates &array[], int &bar_highest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double high=DBL_MIN;
bar_highest=-1;
for(int i=0; i<sz; i++) {
double value=fmax(array[i].open,array[i].close);
if(value>high) {
high=value;
bar_highest=bar_begin+i;
}
}
return(high);
}
//+------------------------------------------------------------------+
double GetLowestValue(int bar_begin, MqlRates &array[], int &bar_lowest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double low=DBL_MAX;
bar_lowest=-1;
for(int i=0; i<sz; i++) {
double value=fmin(array[i].open,array[i].close);
if(value<low) {
low=value;
bar_lowest=bar_begin+i;
}
}
return(low);
}
//+------------------------------------------------------------------+
テストスクリプトを組んでみました。その場で書いたので不正確な点があるかもしれません。コツをつかんでほしいですね。
//| sFindRangeByCandlesBody.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
...
//+------------------------------------------------------------------+
ありがとうございます!効果抜群です
PS.これって5でも使えるんでしょ?
ありがとうございます!効果抜群です
PS.これって、5でも使えるんですね?
{
//+--------------------------------------------------------------------+
//| -= stop loss в без убыток =- |
//+--------------------------------------------------------------------+
bool result;
double stop;
int cmd,error;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderProfit()>pOPCS)
{
cmd=OrderType();
double blevel=OrderStopLoss()<Bid-Point*TS;
double slevel=OrderStopLoss()>Ask+Point*TS;
//---
if(cmd==OP_BUY || cmd==OP_SELL)
{
while(true)
{
if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else stop=Ask+Point*TS;
result=OrderModify(OrderTicket(),OrderOpenPrice(),stop,0,0,Orange);
if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
}
テストスクリプトを添付します。不正確かもしれません、手を動かしていないのです。ぜひ理解してほしい。
何か質問があれば...
アルテムさんには申し訳ないのですが、この問題の解決策をもっとシンプルに示したいのです
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
皆さんもコードに書いて、必要なチェックを入れていただければと思います。mql4、mql5ともに機能は同じです。
Artemさん、申し訳ありませんが、この問題に対してよりシンプルな解決策を示したいのです
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
皆さんもコードに書いて、必要なチェックを入れていただければと思います。mql4、mql5ともに機能は同じです。
О!ありがとうございます。朝、自分で当てたことがない...。たしかに、アレイが埋まっていないかチェックする必要がありますね。4倍では見たことがありませんし、5倍では過去の データがないため、初回では埋まらないことが多いようです。
ZS もっと寝たほうがいい。思考がその方向に働く。