どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 930 1...923924925926927928929930931932933934935936937...1178 新しいコメント capricornsuper 2015.08.24 01:47 #9291 ディパック 、 いつもありがとうございます。あなたの例を分析しました。スタートアップのコードを少し変更しました。その結果、こうなりました。void OnStart() { int awd1[]; ArrayResize(awd1,6,7); for(int i=0;i<=5;i++) { awd1[i]=i+10; Print("awd1[", i, "]=", awd1[i]); } Alert("awd1[0]=", awd1[0], ", awd1[1]=", awd1[1], ", awd1[2]=", awd1[2], ", awd1[3]=", awd1[3], ", awd1[4]=", awd1[4], ", awd1[5]=", awd1[5]); }変更された点1.int awd1[];の配列を含む行をOnStart()関数内に移動しました。2.ArrayResize(awd1,6,7)関数を 追加しました。3.スクリプトが動作します。いくつかの結論を出してみる。スクリプトでは、OnStart()関数の内部で配列を宣言するのが正しい。配列が宣言された後、ArrayResize()関数を使ってそのサイズを必ず定義しなければなりません。そうしないと、コンパイラは嘆きます。私の結論は正しいのでしょうか?そうでない場合は、正しい解釈を教えてください。 Dina Paches 2015.08.24 04:29 #9292 silachara:ディパック 、 いつもありがとうございます。あなたの例を分析しました。スタートアップのコードを少し変更しました。その結果、こうなりました。変更された点1.OnStart()関数内のint awd1[];配列宣言を含む行を移動。2.ArrayResize(awd1,6,7)関数を追加しました。3.スクリプトが動作します。結論を出してみる。スクリプトでは、OnStart()関数の内部で配列を宣言するのが正しい。配列が宣言された後、ArrayResize()関数を使って必ずサイズを定義しなければなりません。そうしないと、コンパイラはエラーを発生します。私の結論は正しいのでしょうか?そうでない場合は、正しい解釈を教えてください。一般的には、そうですね。そしてそれは、少なくとも静かに、しかし非常によく機能するでしょう。:)以下の点のみ明記させていただきます。1. 通常の変数や配列を宣言する場合、スクリプト(またはEA/インジケータ)が何をしようとしているのか、これらの変数/配列は何のためにあるのかを考える必要があると思います。 添付のスクリプトのワークフローでは、グローバルなプログラムレベルではなく、ローカルに変数を宣言することができます。つまり、配列は一度だけ宣言される。Start()本体でのループ宣言は必要ありません。例えば、for()ループを開始する前や、for() {}の後に さらにいくつかの変数の宣言が必要な場合などです。したがって、配列はプログラムのグローバル変数ではなく、For()ループの文の前の OnStart()の本体で宣言されており、このプログラムの実行方式では全く問題ない。私の考えでは、プログラムの中でグローバル変数のレベルで宣言する必要がないものは、この機会にローカルで宣言できるものはすべて宣言した方がいいと思っています。2. コードについては、はっきりさせておきます。void OnStart() { int awd1[]; ArrayResize(awd1,6,7); for(int i=0;i<6;i++) { awd1[i]=i+10; Print("awd1[",i,"]=",awd1[i]); } string text=StringConcatenate("awd1[0]=",awd1[0],", awd1[1]=",awd1[1],", awd1[2]=",awd1[2], ", awd1[3]=",awd1[3],", awd1[4]=",awd1[4],", awd1[5]=",awd1[5]); Alert(text); }ということです。forに<=記号(less than equal)を使ってはいけない。だったところということです(i=0;i<=5;i++)。単純に<(less than)を付けて、5ではなく6と表記します。for(int i=0;i<6;i++) 5はforにふさわしいやり方だと思います。for(int i=5;i>=0;i--)以前、Stringconcatenate 関数を使うと長文の処理が速くなるという情報に遭遇した記憶があります。だから、普段からコードに使っているんです。念のため、こちらにも追加しておきました。P./S.: 念のため、ArrayResize() の使用について、もう一つ明確にしておきます -動的 配列の場合。 この関数のドキュメントに、この関数が動的配列のリサイズを行えない場合の情報が あります。 Boris 2015.08.24 15:42 #9293 Best_ATS: 友達を追加できないのですが? また、生活の中で、仕事から個人的に知っているわけでもないのに、どうやって友人を想像するのでしょうか。 Nauris Zukas 2015.08.25 11:09 #9294 こんにちは!新しい価格が最初に表示され、前の価格が下に落ちるなどということはどうすればいいのでしょうか?わかりやすくするために、例を作ってみました。double NN=0; double NN1=0; double NN2=0; double NN3=0; void OnTick() { //--- if(Ask>NN)NN=Ask; if(NN>NN1)NN1=NN; if(NN1>NN2)NN2=NN1; if(NN2>NN3)NN3=NN2; Comment("" + "1. "+"Buy: "" Max: " + DoubleToStr(NN,5) + "\n" + "2. "+"Buy: "" Max: " + DoubleToStr(NN1,5) + "\n" + "3. "+"Buy: "" Max: " + DoubleToStr(NN2,5) + "\n" + "4. "+"Buy: "" Max: " + DoubleToStr(NN3,5) + "\n" + "------------------------------------------------" ); } TarasBY 2015.08.25 13:22 #9295 abeiks:こんにちは!新しい価格が最初に表示され、前の価格が下に落ちるなどということはどうすればいいのでしょうか?それは例によって明らかでしょう。私は例を作りましたが、多かれ少なかれ条件を使えば、自分で考えることができます。double bda_Price[4]; void OnTick() { int li_int; //--- if (Ask > bda_Price[0]) { ArrayInitialize (bda_Price, 0.); bda_Price[0] = Ask; double lda_Price[3]; ArrayCopy (lda_Price, bda_Price, 0, 1); for (int li_int = 1; li_int < 4; li_int++) {bda_Price[li_int] = lda_Price[li_int-1];} } string ls_txt; StringInit (ls_txt, 100); for (li_int = 0; li_int < 4; li_int++) {ls_txt = StringConcatenate (ls_txt, (string) li_int, ". Buy: Max: ", DoubleToStr (bda_Price[li_int], Digits), "\n"); ls_txt = StringConcatenate (ls_txt, "------------------------------------------------" ); Comment (ls_txt); //--- } Nauris Zukas 2015.08.25 13:47 #9296 TarasBY:例題を作りましたので、多かれ少なかれご自身で条件を考えてみてください。 ありがとうございました。 capricornsuper 2015.08.25 14:06 #9297 abeiks:こんにちは!新しい価格が最初に表示され、前の価格が下に落ちるなどということはどうすればいいのでしょうか?わかりやすくするために、例を挙げてみました。ここでは、完全に原始的なコードを紹介します。double Price1, Price2, Price3, Price4; void OnTick() { Price4=Price3; Price3=Price2; Price2=Price1; Price1=Ask; Comment(Price1, "\n", Price2, "\n", Price3, "\n", Price4); } Nauris Zukas 2015.08.25 14:31 #9298 silachara:ここで、完全に原始的なコードを作ってみました。 ありがとうございました。 削除済み 2015.08.25 16:06 #9299 皆さん、こんにちは。初歩的なスクリプトを使ってストラテジーテスターで 取引注文を出そうとしましたが、失敗しました。int start(){//----int res;double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point。res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0,", 0,0,Blue) となります。if(res>-1)Alert("Open BUY order with ticket ",res))チケットで買い注文。//----return(0)です。}可視化モードのテスターチャートにスクリプトを置いたのですが、MT4ターミナルで取引注文が開いてしまいます。また、SimpleFXTester_v2.ex4を使用したストラテジーテスターで、オープンオーダーの情報を取得することができません。よろしくお願いします。 Alexey Viktorov 2015.08.26 04:09 #9300 kosmos0975:皆さん、こんにちは。初歩的なスクリプトを使ってストラテジーテスターで取引注文を出そうとしましたが、失敗しました。int start(){//----int res;double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point。res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0,", 0,0,Blue) となります。if(res>-1)Alert("Open BUY order with ticket ",res))チケットで買い注文。//----return(0)です。}可視化モードのテスターチャートにスクリプトを置いたのですが、MT4ターミナルで取引注文が開かれてしまいます。また、SimpleFXTester_v2.ex4を使用したストラテジーテスターで、オープンオーダーの情報を取得することができません。よろしくお願いします。 Strategy Testerのスクリプトが動作しない。 1...923924925926927928929930931932933934935936937...1178 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ディパック 、 いつもありがとうございます。あなたの例を分析しました。スタートアップのコードを少し変更しました。その結果、こうなりました。
変更された点
1.int awd1[];の配列を含む行をOnStart()関数内に移動しました。
2.ArrayResize(awd1,6,7)関数を 追加しました。
3.スクリプトが動作します。
いくつかの結論を出してみる。スクリプトでは、OnStart()関数の内部で配列を宣言するのが正しい。配列が宣言された後、ArrayResize()関数を使ってそのサイズを必ず定義しなければなりません。そうしないと、コンパイラは嘆きます。私の結論は正しいのでしょうか?そうでない場合は、正しい解釈を教えてください。
ディパック 、 いつもありがとうございます。あなたの例を分析しました。スタートアップのコードを少し変更しました。その結果、こうなりました。
変更された点
1.OnStart()関数内のint awd1[];配列宣言を含む行を移動。
2.ArrayResize(awd1,6,7)関数を追加しました。
3.スクリプトが動作します。
結論を出してみる。スクリプトでは、OnStart()関数の内部で配列を宣言するのが正しい。配列が宣言された後、ArrayResize()関数を使って必ずサイズを定義しなければなりません。そうしないと、コンパイラはエラーを発生します。私の結論は正しいのでしょうか?そうでない場合は、正しい解釈を教えてください。
一般的には、そうですね。そしてそれは、少なくとも静かに、しかし非常によく機能するでしょう。:)
以下の点のみ明記させていただきます。
1. 通常の変数や配列を宣言する場合、スクリプト(またはEA/インジケータ)が何をしようとしているのか、これらの変数/配列は何のためにあるのかを考える必要があると思います。
添付のスクリプトのワークフローでは、グローバルなプログラムレベルではなく、ローカルに変数を宣言することができます。つまり、配列は一度だけ宣言される。Start()本体でのループ宣言は必要ありません。例えば、for()ループを開始する前や、for() {}の後に さらにいくつかの変数の宣言が必要な場合などです。
したがって、配列はプログラムのグローバル変数ではなく、For()ループの文の前の OnStart()の本体で宣言されており、このプログラムの実行方式では全く問題ない。
私の考えでは、プログラムの中でグローバル変数のレベルで宣言する必要がないものは、この機会にローカルで宣言できるものはすべて宣言した方がいいと思っています。
2. コードについては、はっきりさせておきます。
ということです。
5はforにふさわしいやり方だと思います。
P./S.: 念のため、ArrayResize() の使用について、もう一つ明確にしておきます -動的 配列の場合。 この関数のドキュメントに、この関数が動的配列のリサイズを行えない場合の情報が あります。
友達を追加できないのですが?
こんにちは!新しい価格が最初に表示され、前の価格が下に落ちるなどということはどうすればいいのでしょうか?わかりやすくするために、例を作ってみました。
こんにちは!新しい価格が最初に表示され、前の価格が下に落ちるなどということはどうすればいいのでしょうか?それは例によって明らかでしょう。
私は例を作りましたが、多かれ少なかれ条件を使えば、自分で考えることができます。
例題を作りましたので、多かれ少なかれご自身で条件を考えてみてください。
こんにちは!新しい価格が最初に表示され、前の価格が下に落ちるなどということはどうすればいいのでしょうか?わかりやすくするために、例を挙げてみました。
ここでは、完全に原始的なコードを紹介します。
ここで、完全に原始的なコードを作ってみました。
皆さん、こんにちは。初歩的なスクリプトを使ってストラテジーテスターで 取引注文を出そうとしましたが、失敗しました。
int start()
{
//----
int res;
double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point。
res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0,", 0,0,Blue) となります。
if(res>-1)Alert("Open BUY order with ticket ",res))チケットで買い注文。
//----
return(0)です。
}
可視化モードのテスターチャートにスクリプトを置いたのですが、MT4ターミナルで取引注文が開いてしまいます。
また、SimpleFXTester_v2.ex4を使用したストラテジーテスターで、オープンオーダーの情報を取得することができません。
よろしくお願いします。
皆さん、こんにちは。初歩的なスクリプトを使ってストラテジーテスターで取引注文を出そうとしましたが、失敗しました。
int start()
{
//----
int res;
double ask=Close[0]+MarketInfo(_Symbol,MODE_SPREAD)*Point。
res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0,", 0,0,Blue) となります。
if(res>-1)Alert("Open BUY order with ticket ",res))チケットで買い注文。
//----
return(0)です。
}
可視化モードのテスターチャートにスクリプトを置いたのですが、MT4ターミナルで取引注文が開かれてしまいます。
また、SimpleFXTester_v2.ex4を使用したストラテジーテスターで、オープンオーダーの情報を取得することができません。
よろしくお願いします。