どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 602 1...595596597598599600601602603604605606607608609...1178 新しいコメント Denis Lysenko 2014.05.13 14:15 #6011 AlexeyVik: 私があなたを理解できないか、あなたが何かを理解していないかのどちらかです..csvファイルに問題があるのでしょうか?最初のバーがカウントされていない限り prev_calculated または IndicatorCounted() (旧バージョン) はゼロになり、これは正しい。 。 そうですね、理解できますね。私のログを添付します。20000本目のバーから0本目のバーまで行くと、また20000本全部を回し始めるようなことが判明しました。つまり、OnCalculateが 完了しないか、rates_totalの代わりにゼロを返す。 でも、なぜかこのバグは影響がなかったんですよね。あなたの場合、すべてうまくいっていますね。 では、私のマシン/システムのどこが悪いのか、理解できないのですか? Alexey Viktorov 2014.05.13 14:27 #6012 Expert: そうですね、理解できますね。私のログを添付しました。20000barの最後を0にすると、また20000barを全部始めるかのようになることが判明しました。つまり、OnCalculateが完了しないか、rates_totalの代わりにゼロを返す。 でも、なぜかこのバグは影響がないんですよね。あなたには問題なく使えますが...。 では、私のマシン/システムのどこが悪いのかがわからないのですか? ネストしたサイクルをまず100分の1に減らし、さらに追加してみてください。そうすれば、i5が処理しきれないのか、MTが遅くなっているのかがわかるでしょう。 ネストしたループを1つだけ10分の1に減らしたことに気づきましたか?そんな感じで、再計算に2分12秒かかりました。 この行でできること limit = (prev_calculated > 0)?rates_total-prev_calculated:rates_total-100.Limit = (prev_calculated > 0)?rates_total-prev_calculated:rates_total-100; 100%増量。これにより、インジケータ起動時に再計算されるバーを減らすことができます。 ANDREY 2014.05.13 14:52 #6013 皆さん、こんばんは!(夜、朝、昼)。 以下の条件のコーディング方法を教えてください。 High[1]の場合...High[300]の場合。(すべて例外)< Open[0]. 注文を開始する。 ありがとうございます。 isn-88 2014.05.13 15:10 #6014 solnce600: 皆さん、こんばんは!(夜、朝、昼)。 以下の条件のコーディング方法を教えてください。 High[1]の場合...High[300]の場合。(すべて例外)< Open[0]. 注文を開始する。 ありがとうございます。 オプションとして int index=iHighest(NULL,0,MODE_HIGH,300,1); if(High[index]<Open[0]) { //открываем ордер } ANDREY 2014.05.13 15:32 #6015 isn-88: オプションとして ありがとうございます。 Александр 2014.05.14 01:45 #6016 EAのどの機能で未来を見ることができるのかがわからない。EAは決まった時間にポジションを開くということですが、そういうのを回避する方法を探して、非常に多くの穴があります。 Alexey Oreshkin 2014.05.14 02:56 #6017 001: EAのどの機能で未来を見ることができるのかがわからない。EAは決まった時間にポジションを開くということですが、そういうのを回避する方法を探して、非常に多くの穴があります。 未来ではなく、過去を見る必要はなく、穴が開いていないかチェックすればいいだけです。 Alexey Viktorov 2014.05.14 03:42 #6018 001: EAのどの機能で未来を見ることができるのかがわからない。EAは決まった時間にポジションを開くということですが、そんなことを回避する方法を探して、穴だらけになっています。 。 どの穴のことを言っているのですか?プログラミングの質問をすると、このような表現は適切ではない、穴はシンボルのヒストリカルデータの ギャップである、ここはどういう意味か?質問文に「時間」が入っている場合、おそらく「タイムトラベルホール」テレポーテーションのことを指しているのでしょう。 もし私にテレパシー能力があるのなら、楽器の履歴をしっかり把握すればいいんです。 削除済み 2014.05.14 05:12 #6019 助けが必要だ、同僚たちよ。 EA(第一子)を書いているのですが、正しく動作させるためにはヒストリカルデータの分析が必要です。 始値、高値と安値の始 値の配列を使用しています。 アレイを日足に分割すると、ほぼすべての期間で異なる数の分バーが表示されます。1440分のバーはすべて物理的にチャートに存在するが、履歴では1日あたり1380、1378、3000本以上となっている。 何が問題なのか、ご教示ください。私の考えでは、歴史と実際の(描かれた)チャートが異なることはありえません。 以下は、それをすべて計算するコードの一部です。 void CountStartTime(int i)//Собственно функция расчета времен, параметр - номер периода расчета { int my_by_tp, my_sell_tp, my_by_sl, my_sell_sl; int j_v_t = my_period_array_start[i];//Смещение от начала расчетного периода // Alert("Обсчет истории в ", i, " день"); do { //Устанавливаем пороги double MyOpenPrise = my_open_array[j_v_t]; double MyByTakeProfit = MyOpenPrise + (TakeProfit + 5)*RealPoint; double MySellTakeProfit = MyOpenPrise - (TakeProfit + 5)*RealPoint; double MyByStopLoss = MyOpenPrise - (StopLoss - 5)*RealPoint; double MySellStopLoss = MyOpenPrise + (StopLoss - 5)*RealPoint; for ( my_by_tp = j_v_t; my_by_tp >= my_period_array_stop[i-1]; my_by_tp--) { if(my_max_array[my_by_tp] >= MyByTakeProfit) break;//Срабатывает при превышении уровня тейк-профита } for ( my_by_sl = j_v_t; my_by_sl >= my_period_array_stop[i-1]; my_by_sl--) { if(my_min_array[my_by_sl] <= MyByStopLoss) break;//Срабатывает при превышении уровня стоп-лоса } for ( my_sell_tp = j_v_t; my_sell_tp >= my_period_array_stop[i-1]; my_sell_tp--) { if(my_min_array[my_sell_tp] <= MySellTakeProfit) break;//Срабатывает при превышении уровня тейк-профита } for ( my_sell_sl = j_v_t; my_sell_sl >= my_period_array_stop[i-1]; my_sell_sl--) { if(my_max_array[my_sell_sl] >= MySellStopLoss) break;//Срабатывает при превышении уровня стоп-лоса } //А теперь проверка на наличие всех четырех точек if(my_by_tp >= my_period_array_stop[i-1] && my_sell_tp >= my_period_array_stop[i-1] && my_by_sl <= my_by_tp && my_sell_sl <= my_sell_tp) { my_time_vvoda_array[TimeHour(my_time_array[j_v_t])][TimeMinute(my_time_array[j_v_t])][i-1] = 1; } j_v_t--;//отступаем на 1 тикет в сторону окончания периода расчета } while(j_v_t >= my_period_array_stop[i-1]);//и расчет точек по новой Alert("дата первого бара ",TimeToString(my_time_array[my_period_array_start[i]],TIME_DATE),", Start - ",my_period_array_start[i],", дата последнего бара ",TimeToString(my_time_array[my_period_array_stop[i]],TIME_DATE),", Stop - ",my_period_array_stop[i]); return; } void CountStartTimeFinal()//Собственно функция расчета времени на конце истории { int my_by_tp, my_sell_tp, my_by_sl, my_sell_sl; int j_v_f = 2500;//Смещение от начала расчетного периода do { //Устанавливаем пороги double MyOpenPrise = my_open_array[j_v_f]; double MyByTakeProfit = MyOpenPrise + (TakeProfit + 5)*RealPoint; double MySellTakeProfit = MyOpenPrise - (TakeProfit + 5)*RealPoint; double MyByStopLoss = MyOpenPrise - (StopLoss - 5)*RealPoint; double MySellStopLoss = MyOpenPrise + (StopLoss - 5)*RealPoint; for ( my_by_tp = j_v_f; my_by_tp >= 1; my_by_tp--) { if(my_max_array[my_by_tp] >= MyByTakeProfit) break;//Срабатывает при превышении уровня тейк-профита } for ( my_by_sl = j_v_f; my_by_sl >= 1; my_by_sl--) { if(my_min_array[my_by_sl] <= MyByStopLoss) break;//Срабатывает при превышении уровня стоп-лоса } for ( my_sell_tp = j_v_f; my_sell_tp >= 1; my_sell_tp--) { if(my_min_array[my_sell_tp] <= MySellTakeProfit) break;//Срабатывает при превышении уровня тейк-профита } for ( my_sell_sl = j_v_f; my_sell_sl >= 1; my_sell_sl--) { if(my_max_array[my_sell_sl] >= MySellStopLoss) break;//Срабатывает при превышении уровня стоп-лоса } //А теперь проверка на наличие всех четырех точек if(my_by_tp > 1 && my_sell_tp > 1 && my_by_sl <= my_by_tp && my_sell_sl <= my_sell_tp) { my_time_vvoda_final[TimeHour(my_time_array[j_v_f])*60 + TimeMinute(my_time_array[j_v_f])] = 1; } j_v_f--;//отступаем на 1 тикет в сторону окончания периода расчета } while(j_v_f >= 1);//и расчет точек по новой return; } void tochka_vvoda () { if(AutoCountTime == true) { int i, j_v, k_v = 0, l = 0, m, n, a_i = 0; PointCount();//Считаем значение пункта for(i=0;i<=23;i++)//Обнуляем значения массивов { for(j_v=0;j_v<=59;j_v++) { for(k_v=0;k_v<=39;k_v++) my_time_vvoda_array[i][j_v][k_v] = 0;//Итоговый массив по суткам my_time_vvoda_start[60*i + j_v] = 0;//Итоговый суточный массив дальней истории my_time_vvoda_final[60*i + j_v] = 0;//Итоговый суточный массив ближайшей истории my_time_vvoda_count[60*i + j_v] = 0;//Итоговый массив } } k_v = 0; j_v = 0; m = 0; n = 0; bool srt = false; Alert(""); Alert(""); Alert(""); datetime StartTime;//Время начала периода расчета StartTime = StrToTime(StartBarTime); // текущая дата + время datetime EndTime;//Время конца периода расчета EndTime = StrToTime(FinishBarTime); // текущая дата + время k_v = 1; for(i=0;i<=49999;i++)//Чтение истории на минутном графике и запись ее по массивам { while(iTime(Symbol(),1,k_v) == 0) k_v++; my_open_array[i] = iOpen(Symbol(),1,k_v);//Массив цен открытия my_max_array[i] = iHigh(Symbol(),1,k_v);//Массим максимумов my_min_array[i] = iLow(Symbol(),1,k_v);//Массив минимумов my_time_array[i] = iTime(Symbol(),1,k_v);//Массив времен открытия k_v++; if((j_v <= i) && srt == false && (TimeHour(my_time_array[i]) == TimeHour(EndTime)) && (TimeMinute(my_time_array[i]) == TimeMinute(EndTime))) { j_v = i + 10; srt = true; if(a_i < 40) my_period_array_stop[a_i] = i;//Массив тикетов окончания расчетного периода, разделенный по дням } if((j_v <= i)&& srt == true && (TimeHour(my_time_array[i]) == TimeHour(StartTime)) && (TimeMinute(my_time_array[i]) == TimeMinute(StartTime))) { j_v = i; srt = false; if(a_i < 40) my_period_array_start[a_i] = i;//Массив тикетов начал расчетного периода, разделенный по дням a_i++; } if(k_v >= iBars(Symbol(),1)) break; } Alert("Величина истории (iBars) = ",iBars(Symbol(),1), " баров"); Alert("Для расчета можно использовать ",a_i, " периодов"); if(a_i == 0) { MessageBox("Расчет истории не возможен","ВНИМАНИЕ",0x00000030); return; } //Вызов функции обсчета истории по дням if(a_i < VelichinaIstorii) MyHistiryLoss = true; else MyHistiryLoss = false; for(day_id = VelichinaIstorii; day_id >= 1; day_id--) CountStartTime(day_id); for(i=0;i<=23;i++) { for(j_v=0;j_v<=59;j_v++) { k_v=0; for(day_id = VelichinaIstorii - 1; day_id >= 0; day_id--) { k_v = k_v + my_time_vvoda_array[i][j_v][day_id]; } if(k_v == VelichinaIstorii - 1) my_time_vvoda_start[60*i + j_v] = 1;//Alert("Полное совпадение в ", i," часов ", j," минут"); } } CountStartTimeFinal();//Вызов функции обсчета ближайшей истории m = 0; n = 0; for(i=0;i<=1439;i++) { if(my_time_vvoda_start[i] == 1 && my_time_vvoda_final[i] == 1) { if( m == 0) m = i; n++; } else { if(m != 0 && n != 0) my_time_vvoda_count[m] = n; m = 0; n = 0; } } if(m != 0 && n != 0) my_time_vvoda_count[m] = n; if(MyHistiryLoss != true) { k_v = ArrayMaximum(my_time_vvoda_count,WHOLE_ARRAY,0); l = k_v + MathFloor(my_time_vvoda_count[k_v]/2); if(my_time_vvoda_count[k_v] != 0) { Alert("Максималиное совпадение с ",MathFloor(k_v/60)," часов ",MathMod(k_v, 60)," минут",", длительностью ",my_time_vvoda_count[k_v]," минут"); StartSessionTime = DoubleToStr(MathFloor(l/60),0) + ":" + DoubleToStr(MathMod(l, 60),0); l = l + MathFloor(my_time_vvoda_count[k_v]/2); EndSessionTime = DoubleToStr(MathFloor(l/60),0) + ":" + DoubleToStr(MathMod(l, 60),0); Alert("Начало торговли в ",StartSessionTime); } else { Alert("Точка входа не найдена"); MyHistiryLoss = true; } } else MessageBox("Расчет точки входа не возможен,\n нет достаточной истории","ВНИМАНИЕ",0x00000030); } else { Alert("Время торговли устанавливается в ручном режиме"); MyHistiryLoss = false; } return; } Александр 2014.05.14 05:41 #6020 AlexeyVik: どの穴のことを言ってるんだ?プログラミングの質問をすると、このような表現は適切ではない、穴はツールの履歴データにギャップがある、しかしここではどういうことなのか?質問文に「時間」が入っている場合、おそらく「タイムトラベルホール」テレポーテーションのことを指しているのでしょう。 もし私にテレパシー能力があるのなら、楽器の履歴をしっかり把握すればいいんです。 歴史の穴について、もちろんです。そして、あなたにも質問です。楽器で質の高いストーリーを実現するには、どうすればいいのでしょうか? 1...595596597598599600601602603604605606607608609...1178 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私があなたを理解できないか、あなたが何かを理解していないかのどちらかです..csvファイルに問題があるのでしょうか?最初のバーがカウントされていない限り prev_calculated または IndicatorCounted() (旧バージョン) はゼロになり、これは正しい。 。
そうですね、理解できますね。私のログを添付します。20000本目のバーから0本目のバーまで行くと、また20000本全部を回し始めるようなことが判明しました。つまり、OnCalculateが 完了しないか、rates_totalの代わりにゼロを返す。 でも、なぜかこのバグは影響がなかったんですよね。あなたの場合、すべてうまくいっていますね。
では、私のマシン/システムのどこが悪いのか、理解できないのですか?
そうですね、理解できますね。私のログを添付しました。20000barの最後を0にすると、また20000barを全部始めるかのようになることが判明しました。つまり、OnCalculateが完了しないか、rates_totalの代わりにゼロを返す。
でも、なぜかこのバグは影響がないんですよね。あなたには問題なく使えますが...。
では、私のマシン/システムのどこが悪いのかがわからないのですか?
ネストしたサイクルをまず100分の1に減らし、さらに追加してみてください。そうすれば、i5が処理しきれないのか、MTが遅くなっているのかがわかるでしょう。
ネストしたループを1つだけ10分の1に減らしたことに気づきましたか?そんな感じで、再計算に2分12秒かかりました。
この行でできること
limit = (prev_calculated > 0)?rates_total-prev_calculated:rates_total-100.Limit = (prev_calculated > 0)?rates_total-prev_calculated:rates_total-100;
100%増量。これにより、インジケータ起動時に再計算されるバーを減らすことができます。
皆さん、こんばんは!(夜、朝、昼)。
以下の条件のコーディング方法を教えてください。
High[1]の場合...High[300]の場合。(すべて例外)< Open[0].
注文を開始する。
ありがとうございます。
皆さん、こんばんは!(夜、朝、昼)。
以下の条件のコーディング方法を教えてください。
High[1]の場合...High[300]の場合。(すべて例外)< Open[0].
注文を開始する。
ありがとうございます。
オプションとして
オプションとして
EAのどの機能で未来を見ることができるのかがわからない。EAは決まった時間にポジションを開くということですが、そういうのを回避する方法を探して、非常に多くの穴があります。
未来ではなく、過去を見る必要はなく、穴が開いていないかチェックすればいいだけです。
EAのどの機能で未来を見ることができるのかがわからない。EAは決まった時間にポジションを開くということですが、そんなことを回避する方法を探して、穴だらけになっています。 。
もし私にテレパシー能力があるのなら、楽器の履歴をしっかり把握すればいいんです。
助けが必要だ、同僚たちよ。
EA(第一子)を書いているのですが、正しく動作させるためにはヒストリカルデータの分析が必要です。
始値、高値と安値の始 値の配列を使用しています。
アレイを日足に分割すると、ほぼすべての期間で異なる数の分バーが表示されます。1440分のバーはすべて物理的にチャートに存在するが、履歴では1日あたり1380、1378、3000本以上となっている。
何が問題なのか、ご教示ください。私の考えでは、歴史と実際の(描かれた)チャートが異なることはありえません。
以下は、それをすべて計算するコードの一部です。
どの穴のことを言ってるんだ?プログラミングの質問をすると、このような表現は適切ではない、穴はツールの履歴データにギャップがある、しかしここではどういうことなのか?質問文に「時間」が入っている場合、おそらく「タイムトラベルホール」テレポーテーションのことを指しているのでしょう。
もし私にテレパシー能力があるのなら、楽器の履歴をしっかり把握すればいいんです。
歴史の穴について、もちろんです。そして、あなたにも質問です。楽器で質の高いストーリーを実現するには、どうすればいいのでしょうか?