たまたま、私は英語を習ったことがないんです。学校でも、一つの研究所でも、二つ目の研究所でも、英語を習ったことがないんです。今でも耳では全く理解できません。私自身も勉強中ですが、最初に挑戦したのはプログラミングを始めるずっと前です。Annygdot " - How did you learn English so fast?- C++からすべての単語を得たのだから、何を学べばいいのか」、それが私です。
Nikolai Semko: defineで何かやってみよう。今、パソコンの前にいないだけです。ロシア語の変数名がないとどうにもならないのであれば、デバッガでなんとか工夫できるかもしれませんね。
私は、一般の方々の便宜を図るため、私のソリューションコードを英語に翻訳しました。
//+------------------------------------------------------------------+//| Новый бар 2.mq4 |//| Peter Konow |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Peter Konow"#property link"https://www.mql5.com"#property version"1.00"#property strict//+------------------------------------------------------------------+datetime Last_Bar_Time;
int Periodicity = 25;
int All_symbols;
string Symbols[];
int Timeframes[7] = {PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1};
int All_Timeframes = 7;
int All_bars_table[][7];
bool New_Bar_Events[][7];
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- create timerEventSetMillisecondTimer(25);
//-------------------------------------------------------------//Записываем время последнего бара на момент загрузки эксперта. //Для корректного начала работы, робота нужно запустить на М1. //-------------------------------------------------------------
Last_Bar_Time = Time[0];
//------------------------------------------------------------- //Узнаем сколько символов есть в обзоре рынка.//---------------------------------------------------------
All_symbols = SymbolsTotal(true);
//--------------------------------------------------------- //Устанавливаем размер массива Symbols. Внутри него будут записаны//имена всех символов, которые есть в окне обзоре рынка.//---------------------------------------------------------ArrayResize(Symbols,All_symbols);
//---------------------------------------------------------//Устанавливаем размеры массивов "All_bars_table[]" и "New_Bar_Events[]".//В массиве "All_bars_table[]" будет записыватся текущее количество баров каждого символа//и каждого таймфрейма. А в массиве "New_Bar_Events[]" устанавливаться флаги//события нового бара для каждого символа и каждого таймфрейма. //---------------------------------------------------------ArrayResize(All_bars_table,All_symbols);
ArrayResize(New_Bar_Events,All_symbols);
//---------------------------------------------------------//Записываем наименования символов обзора рынка в массив "Symbols[]".//---------------------------------------------------------for(int a1 = 0; a1 < All_symbols; a1++)
{
Symbols[a1] = SymbolName(a1 + 1,true);
//Возможно, нумерация символов в обзора рынка идет с нуля.//Тогда: Symbols[a1] = SymbolName(a1,true);
}
//---------------------------------------------------------return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- destroy timerEventKillTimer();
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
staticbool Start_count;
staticint Current_period;
//---------------------------//Нам нужен корректный старт отсчета. Это должно быть время начала бара.//---------------------------if(!Start_count && Last_Bar_Time != Time[0])Start_count = true;
//--------------------------- if(Start_count)Current_period++;
//--------------------------- //В следующем цикле, мы будем обращатся к функции iBars для получения количества баров на //каждом из символов и таймфреймов, которые будем проходить в цикле.//Далее, будем сравнивать записанное количество баров с текущим и при //наличии разницы установим флаг события нового бара в массив "New_Bar_Events[]".//---------------------------if(Current_period*Periodicity >= 1000)
{
for(int a1 = 0; a1 < All_symbols; a1++)
{
string This_symbol = Symbols[a1];
//---------------------------------for(int a2 = 0; a2 < All_Timeframes; a2++)
{
int This_timeframe = Timeframes[a2];
//------------------------------------------int All_current_bars = iBars(This_symbol,This_timeframe);
//------------------------------------------if(All_current_bars > All_bars_table[a1][a2])
{
//------------------------------------------------------------//Если это не самая первая запись в массив All_bars_table,//то фиксируем событие нового бара.//------------------------------------------------------------if(All_bars_table[a1][a2])
{
New_Bar_Events[a1][a2] = true;
}
//------------------------------------------------------------//Устанавливаем новое значение текущего количества баров.//------------------------------------------------------------
All_bars_table [a1][a2] = All_current_bars;
}
//------------------------------------------
}
}
//---------
Current_period = 0;
}
//-----------------------------------------------//Здесь наш код...//Здесь наш код...//Здесь наш код...//-----------------------------------------------//После завершения всех вызовов на этом событии таймера//снимаем флаги событий нового бара.if(!Current_period)Refresh_new_bar_events_table();
//-----------------------------------------------
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//Функция снимает флаги событий нового бара.//Эта процедура осуществляется после выполнения всего пользовательского//кода один раз в минуту. Вплоть до момента очищения массива флагов //новых баров, все функции могут их видеть обращаясь к массиву напрямую.//+------------------------------------------------------------------+void Refresh_new_bar_events_table()
{
for(int a1 = 0; a1 < All_symbols; a1++)
{
for(int a2 = 0; a2 < All_Timeframes; a2++)
{
New_Bar_Events[a1][a2] = false;
}
}
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//Пример использования событий нового бара в пользовательском функционал.//Просто обращаемся к глобальному массиву "New_Bar_Events[a1][a2]" напрямую//и используем событие в наших торговых алгоритмах.//+------------------------------------------------------------------+void Trading_on_new_bars_strategy()
{
for(int a1 = 0; a1 < All_symbols; a1++)
{
string This_symbol = Symbols[a1];
//----------------------------------for(int a2 = 0; a2 < All_Timeframes; a2++)
{
bool New_bar = New_Bar_Events[a1][a2];
int This_timeframe = Timeframes[a2];
//----------------------------------if(New_bar && This_symbol == "EURUSD" && This_timeframe == PERIOD_M15)
{
//Buy();
}
//---------------------------------- if(New_bar && This_symbol == "AUDUSD" && This_timeframe == PERIOD_M30)
{
//Sell();
}
//----------------------------------
}
}
}
//+------------------------------------------------------------------+
いいえ。
残念ながら14.09の14時まで半ギガの通信量しか残っていないので、見ません。その時はよろしくお願いします。それは何かというと...。
ニコライさん、ありがとうございます。おかげさまで、デバッガについて何も知らなかったことが、どれだけ得をしたかを知ることができました。
もし、それに頼っていたら、今は何もない。たぶん、私だったら、半分くらいかな。
単純に、プログラミングで自国語を使うというコロコロしたアドバンテージが使えなくなるからです。
カナダに住んでいるのに、私よりずっと英語がわかるから不思議です。長い名前を英語で書いてみてはいかがでしょうか。ただし、赤色でハイライトされることはありません。
あなたの心の中のすべての単語について(無意識とはいえ)翻訳する?
母国語は生物学的に脳に刻み込まれる。理解は最速で。宇宙人の言葉は、理解される前に必ず加工されます。
純粋な生物学。
自分のコードを理解するのも、英語を使うよりロシア語を使った方がずっと早い。暗記がはかどります。
あなたの心の中のすべての単語について(無意識とはいえ)翻訳する?
母国語は生物学的に脳に刻み込まれる。理解は最速で。宇宙人の言葉は、理解される前に必ず加工されます。
純粋な生物学。
自分のコードを理解するのも、英語を使うよりロシア語を使った方がずっと早い。覚えるのがだいぶ楽になりました。
あなたの心の中のすべての単語について(無意識とはいえ)翻訳する?
母国語は生物学的に脳に刻み込まれる。理解は最速で。宇宙人の言葉は、理解される前に必ず加工されます。
純粋な生物学。
自分のコードを理解するのも、英語を使うよりロシア語を使った方がずっと早い。ずっと覚えています。
たまたま、私は英語を習ったことがないんです。学校でも、一つの研究所でも、二つ目の研究所でも、英語を習ったことがないんです。今でも耳では全く理解できません。私自身も勉強中ですが、最初に挑戦したのはプログラミングを始めるずっと前です。Annygdot " - How did you learn English so fast?- C++からすべての単語を得たのだから、何を学べばいいのか」、それが私です。
そして、ご存知ですか?私はなぜかアンパンマンを食べたことがありません。だから、自分のことは自分で話す。みんなに一般化しない。
defineで何かやってみよう。今、パソコンの前にいないだけです。ロシア語の変数名がないとどうにもならないのであれば、デバッガでなんとか工夫できるかもしれませんね。
私は、一般の方々の便宜を図るため、私のソリューションコードを英語に翻訳しました。
混同していなければいいのですが。
ニコライさん、ありがとうございます。おかげさまで、デバッガについて何も知らなかった私が、どれだけ得をしたかを知ることができました。
もし、それに頼っていたら、今は何もない。たぶん、私だったら、半分くらいかな。
単純に、プログラミングで自国語を使うというコロコロしたアドバンテージが使えなくなるからです。
一般の方々の便宜を図るため、私の解答コードを英語に翻訳してみました。
間違っていなければいいのですが。
ぜひ試してみてください。
もし私がOOPやデバッガーなどのツールを使って仕事をしたら、もっと早く、もっと良いものができるに違いない!」と。
反論はしません。私が選んだ方法、アプローチ、ツールが正しかったかどうかは、時間と実践が教えてくれるでしょう。
プリントを試して結果を確認する
成果はいかがですか?
どこから関数を呼び出しているのですか?