//+------------------------------------------------------------------------------------------+//| ArraySetAsSeries.mq4 |//+------------------------------------------------------------------------------------------+//| script program start function |//+------------------------------------------------------------------------------------------+//------------------------------------ НАЧАЛО START -------------------------------------- 1 -int start() //функция start
{ //начало startdouble Timestart=GetTickCount(); //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения скриптаdouble array1[][6]; //объявляем массив-источник (массив, из к-о будут скопированы данные)double array2[][6]; //объявляем массив-приемник (массив, куда будут скопированы данные), к-й на
//момент объявления заполнен некоторыми даннымиint element_1=ArrayCopyRates(array1); //копируем данные баров текущего графика в массив array1 int element_2=ArrayCopy(array2,array1,0,0,WHOLE_ARRAY); //копируем данные всех баров в пользовательский массивbool element_3=ArrayGetAsSeries(array2); //проверка: является ли массив array1 массивом-таймсериейbool try_1=ArraySetAsSeries(array2,false); //устанавливаем НАПРАВЛЕНИЕ индексирования массива bool element_4=ArrayGetAsSeries(array2); //проверка: является ли массив array2 массивом-таймсериейdouble element=array2[0][1]; //получаем значение цены открытия нулевого бара//----------------------------------------------------------------------------------------- 2 -Comment("\nФункция ArrayCopyRates(array1) вернула: ",element_1,
"\nФункция ArrayCopy(array2,array1,0,WHOLE_ARRAY) вернула: ",element_2,
"\nФункция ArrayGetAsSeries(array2) вернула: ",element_3,
"\nФункция ArraySetAsSeries(array2;false) вернула: ",try_1,
"\nФункция ArrayGetAsSeries(array2) вернула: ",element_4,
"\nЦена открытия нулевого бара (т.е. бара с ИНДЕКСОМ 0) равна: ",element,
"\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",
MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000,
" миллисекунд");//печать сообщения на экран//----------------------------------------------------------------------------------------- 3 -return(0); //выход из start
} //конец start//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -
親愛なるプログラマー。次の原則でコードを書くのを助けてください - 買いシグナル - オープン買い1ポジション.SL.TP.transfer to no-loss
売り信号 -売り1ポジションを開く。SL.TP.ロスレスへの転送.買い-買い1、売り1のポジションがある場合、買い2をオープンします。売りシグナル-買い1、買い1のポジションがある場合、売り2をオープンします。買いシグナル-売りポジションがある場合 1. 買いシグナル-売りポジションがある場合 1.売り2.次に売り2を閉じる。買い2.を開く。売りシグナル - 買い1が開いている場合。売り1.買い2.の後、買い2を閉じ、売り2を開く。マーケットが3つ以上のオーダーで動くことはないはずです。もし誰かが助けてくれるなら、どうもありがとうございます。
ダイナミックアレイで悩まないで、あらかじめ、予備で指定しておくか、メモリが足りない?
私の記憶力は許容範囲内ですが、ここではそれは問題ではありません :)
膨大な数の要素を持つ可能性のある配列を指定しても、その何倍も少ない要素しかないのでは意味がないでしょう?
結局、配列を作ることで、すでに動作メモリの一部を占有することになるのです。
まさに
スクリプトを少し修正しました。
その結果、以下のようになりました。
この場合、ArrayCopyRates(array1)関数を使って、現在のチャートのバーのデータを2次元の配列array1にコピーしたのですが、自然に疑問が湧いてきました。そして次の行で関数ArrayCopy(array2,array1,0,0,WHOLE_ARRAY)で、array1のデータをarray2にコピーしているのですが、array1のデータはarray2にコピーされていません。そして、ArrayGetAsSeries関数を使って、array2が配列-時系列であるかどうかをチェックしました。そして、(スクリーンショットから分かるように)配列は時系列配列であることが判明しました。しかし、私は以前にArraySetAsSeries関数でそれを「処理」していませんでした。
質問:最初のケース(前の質問)では、ArraySetAsSeries関数を使用する必要があったのに(私の配列を時系列配列として整理するため)、今回のケースではそのような処理を必要としないのはなぜですか?
P.S. しつこくてすみません。ただ、「歴史の隙間」を作らないように、完全に理解したいだけなんです。これまでのご返信ありがとうございました。
解らないというか、頭が悪いというか・・・。
理論的には0.3のはずなのに、なぜか0.00になっている・・・。
また、0を与える...では、分数はどうやって出すのでしょうか?
もゼロ・・・。
どんなタンバリンで跳べばいいのかわからない・・・・・・。
解らないというか、頭が悪いというか・・・。
理論的には0.3のはずなのに、なぜか0.00になっている・・・。
また、0を与える...では、分数はどうやって出すのでしょうか?
もゼロ・・・。
どんなタンバリンで跳べばいいのかわからない・・・・・・。
1日3回、4〜5時間、ドキュメントを読む。そして、その時だけタンバリンでジャンプする。
3.0/10.0
分かりかねます
と、毎日十数件あります。
ある数を別の数で割ると0になるのはなぜか?
なぜ、3÷2は1であり、1.5ではないのか?
なぜ計算がおかしくなるのか?
正確に0でないにもかかわらず、なぜ0と表示されるのですか?
2つのダブルを比較したとき、ジャーナルでは等しいと表示されるのに、Expert Advisorでは等しくないと表示されるのはなぜですか?
0.0039 > 0.0039 と 0.0039 >= 0.0039 は、なぜ同じ なのですか?
と毎日十数本あります。
ある数を別の数で割ると0になるのはなぜか?
なぜ、3÷2は1であり、1.5ではないのか?
なぜ式が正しく計算されないのでしょうか?
正確に0でないにもかかわらず、なぜ0と表示されるのですか?
2つのダブルを比較したとき、ジャーナルでは等しいと表示されているのに、Expert Advisorでは等しくないと表示されるのはなぜですか?
0.0039 > 0.0039 と 0.0039 >= 0.0039 は、なぜ同じ なのですか?
その理由に心当たりはありますか?
適切な教科書を作るべきかもしれませんね。
十分なトレーニングを行うとか?
こういうのってどこかに書いた方がいいんじゃない?
そうすれば、疑問はなくなるかも?
そして、もう100500のくだらない質問に答える必要はありません。
もしそのような質問があったら、それは生徒のせいではなく、あなたのせいです!」。どこにも記述してないじゃん!!!!
ヘルプには、intからdoubleへの変換方法は書かれていないんです。
とありますが、double型をintに代入すると、端数部分が消えると書いてあります。
普通の人なら、doubleにintを代入すると、ちょうど与えられたゼロの数の点が追加されると論理的に結論づけるのですが...。
だから、こうなんです.
交換
まで
ありがとうございました!試してみます。
心当たりはありますか?
十分なチュートリアルを作るべきかもしれませんね。
十分な指導ができるのでは?
これらの質問は、私のためではありません。あなたと同じユーザーです。
こういうのはどこかに書いておいた方がいいのかもしれませんね。
まあ、書いてあるところを見せましたけど。
そうすれば、疑問はなくなるかも?
いや、消えないよ。断言します。
そして、もう100500のくだらない質問に答える必要はありません。
もしそのような質問があったら、それは生徒のせいではなく、あなたのせいです!」。どこにも書いてないじゃん!!!
これらの質問は、私のためではありません。あなたと同じユーザーです。
ヘルプには、intからdoubleに変換する方法は書かれていない。
とありますが、double型をint型に代入すると、小数部が消去されるとのことです。
普通の人なら、2倍の数値にint型の数値を代入すると、ちょうど与えられたゼロの数を持つ点が追加される、という論理的な発想になるのだが...。
そうですね、アサインは両方向に作用します。
ただし、あなたは自分の論理をさらに組み入れていない。
論理的に考えたら、2つのことを同時にやってはいけないんです。まずダブルに数字を割り当てて、それから別の数字で割ればよかったのです。でも、それは逆で、遅かれ早かれ、あなたはそれに気づくはずなのです。
その理由に心当たりはありますか?
適切な教科書を作るべきかもしれませんね。
十分な指導ができるのでは?
こういうのをどこかに書いておくとか?
そうすれば、疑問はなくなるかも?
そして、もう100500のくだらない質問に答える必要はありません。
もしそのような質問があったら、それは生徒のせいではなく、あなたのせいです!」。どこにも記述してないじゃん!!!!
ヘルプには、intからdoubleに変換する方法は書かれていません。
とありますが、double型をintに代入すると、端数部分が消えると書いてあります。
普通の人なら、doubleにintを代入すると、ちょうど与えられたゼロの数の点が加算されると論理的に結論づけるのですが...。
だから、こうなんです.
ウラジミールさん、あなたにはこのヒステリーを購入した端末のテクニカルサポートに表明する権利があるんですよ。そして、無料端末を使っている間に、自分で解決したマニアと、ホームページで資料を探す時間も惜しんで、それでも何百回目かの答えを出しているあなたのようなアイドルに感謝することです。誰もあなたに借りがあるわけではありません。自分たちでやろうとしているのです。かまってほしいなら、インストラクターを雇って頭をいじってやれ。ダミーとビブを渡される。