[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 228 1...221222223224225226227228229230231232233234235...432 新しいコメント Dimka-novitsek 2013.03.18 10:27 #2271 //записать void SaveArray(string File, double &a[]) { int h = FileOpen(File, FILE_BIN|FILE_WRITE); if(h>0) { int sz = ArraySize(a); FileWriteArray(h,a,0,sz); FileClose(h); } } //прочитать void OpenArray(string File, double &a[], int sz) { int h = FileOpen(File, FILE_BIN|FILE_READ); if(h>0) { ArrayResize(a,sz); FileReadArray(h,a,0,sz); FileClose(h); } } Dimka-novitsek 2013.03.18 10:29 #2272 以下は、その広告です。int Buy[];int Sell[]; string FileBuy="FileBuy.csv",FileSell="FileSell.csv"; Рустам 2013.03.18 11:37 #2273 paladin80: プログラム実行時の資源消費を抑えるという観点から、変数型(int、doubleなど)の宣言はどこにするのが最適か。例えば、int i はグローバルに宣言することも、int start() の中で宣言することもできます ... for (int i=OrdersTotal()-1; i>=0; i--) ....externパラメータの直後にグローバルレベルで一度宣言するよりも、tick毎に宣言する方がコストがかかる気がするのですが。 それともリソースインテンシブの差は同じなのでしょうか? すべての変数(メモリー位置)はプログラム開始時に一旦作成され、その後、本文中に出てくるところで初期化する必要がありますが(変数宣言)、必ずしもそうなるとは限らないので、正常に動作させたい場合は、宣言時に明示的に初期化することを忘れないようにしましょう。 Alexander 2013.03.18 13:14 #2274 シュルキンあなたのコードと一致するようにコードを修正しました。 テストの結果、4つの注文が最初のティックで設定順にクローズし、5つ目の注文が次のティックでクローズしました。おそらく、何度もテストしているので、ここがおかしいのでしょう。 プログラムのコードとテスターのログをお渡ししています。 敬具シュルキンクリアです。交換for(i=0, int k=0; i<OrdersTotal();i++,k++)//に。int total=OrdersTotal(); for(i=0, int k=0; i<total;i++,k++)// 削除済み 2013.03.18 17:41 #2275 ヒストグラムのブロックごとにインジケータの値の合計を計算する方法を教えてください。インジケータを書きましたが、インストールしたときだけ動作し始めます。 前のバーでは何もしません!私は "しばらく "を循環させるために管理していない!ヘルプ、専門家。 Viktar Dzemikhau 2013.03.18 21:31 #2276 次のような状況があります。//+-------------------------------------------------------------------------------------+ //| Блок поиска своих объектов | //+-------------------------------------------------------------------------------------+ bool IsObjectFound() { for (int obj=0; obj<=ObjectsTotal()-1; obj++) { objName = ObjectName(obj); isObj = ObjectFind(objName); objPrice1 = ObjectGet(objName, OBJPROP_PRICE1); objPrice2 = ObjectGet(objName, OBJPROP_PRICE2); objPriceCurr = ObjectGetValueByShift(objName,0); } Print("objPriceCurr = ", objPriceCurr); if (isObj != -1) // Если объект найден, значит выходим из функции return (true); return (false); // Объект не найден! } //+-------------------------------------------------------------------------------------+ //| Функция start | //+-------------------------------------------------------------------------------------+ int start() { int signal = GetSignal(); if (IsObjectFound() == false) { Print("В окне отсуствуют объекты, поиск продолжается..."); return (0); }誤解のあるコードの一部を示しました。すべての変数はグローバルに宣言されています。IsObjectFound() 関数で、オブジェクトの最初の価格ポイントと2番目の価格ポイントの値、名前、現在のバーでのオブジェクトの価格値を取得します。オブジェクトが見つかった場合はtrue モードで, そうでない場合はfalse で関数を終了する必要があります.スタート時に、オブジェクトが見つからなければ関数を終了するという条件を規定しました。if (IsObjectFound() == false) { Print("В окне отсуствуют объекты, поиск продолжается..."); return (0); }テスターで実行すると、オブジェクトは何も描かれておらず、何もない、むき出しのグラフが表示されます。それにもかかわらず、関数は終了せず、それに応じてプリントされません。 Print("В окне отсуствуют объекты, поиск продолжается...");スタート機能は継続されます。これはどういうことなのでしょうか? Алексей Тарабанов 2013.03.18 21:35 #2277 全然ダメなんです。 Viktar Dzemikhau 2013.03.18 21:44 #2278 どうしたんですか? Алексей Тарабанов 2013.03.18 21:50 #2279 グローバル 変数はグローバル検索が可能です。データモデルを見ずに、アルゴリズムについて何が言えるのか?データを正確にトレースしていく。そして,isObjは本当にbooleanで,その他もろもろ. Viktar Dzemikhau 2013.03.18 21:56 #2280 tara:グローバル変数はグローバル検索が可能です。データモデルを見ずに、アルゴリズムについて何が言えるのか?データを正確にトレースしていく。そして,isObjは本当にbooleanで,その他もろもろ. //+-------------------------------------------------------------------------------------+ //| TradingByLine.mq4 | //| hoz | //| | //+-------------------------------------------------------------------------------------+ #property copyright "hoz" #property link "" extern string ___H0 = "Параметры отклонений зоны сигнала"; extern double dernovich = 40, faustUs = 40; /*extern double limitOverLine = 3, limitUnderLine = 20;*/ string objName; // Имя объекта int isObj; // Возвращает окно, которому принадлежит // ..наденнный объект, либо -1 double objPrice1, // Первая координата цены луча objPrice2, // Вторая координата цены луча objPriceCurr; // Цена объекта на заданном баре int pt; #define SIGNAL_BUY 0 // Сигнал на покупку #define SIGNAL_SELL 1 // Сигнал на продажу #define SIGNAL_NO -1 // Сигнала нет //+-------------------------------------------------------------------------------------+ //| Функция иницилизации | //+-------------------------------------------------------------------------------------+ int init() { if(Digits == 2 || Digits == 4) pt = Point; if(Digits == 1 || Digits == 3 || Digits == 5) pt = Point*10; if(Digits == 6) pt = Point*100; if(Digits == 7) pt = Point*1000; return (0); } //+-------------------------------------------------------------------------------------+ //| Функция деиницилизации | //+-------------------------------------------------------------------------------------+ int deinit() { //---- //---- return (0); } //+-------------------------------------------------------------------------------------+ //| Сигнализатор касания о луч | //+-------------------------------------------------------------------------------------+ bool AlertByTouching(int signal) { double priceDevBefore, priceDevAfter; if (signal == SIGNAL_SELL) { priceDevAfter = objPriceCurr + faustUs * pt; priceDevBefore = objPriceCurr - dernovich * pt; if (Bid <= priceDevAfter && Bid >= priceDevBefore) { Print("Внимание. На инструменте ", Symbol(), " ожидается 3-е касание луча. Готовься продавать!"); Alert("Внимание. На инструменте ", Symbol(), " ожидается 3-е касание луча. Готовься продавать!"); return (true); } } if (signal == SIGNAL_BUY) { priceDevAfter = objPriceCurr - faustUs * pt; priceDevBefore = objPriceCurr + dernovich * pt; Print("priceDevAfter = ", objPriceCurr - faustUs * pt); Print("priceDevBefore = ", objPriceCurr - faustUs * pt); Print("Ask >= priceDevAfter && Ask >= priceDevBefore ", Ask ," >= ", priceDevAfter ," && ", Ask ," >= ", priceDevBefore); if (Ask >= priceDevAfter && Ask >= priceDevBefore) { Print("Внимание. На инструменте ", Symbol(), " ожидается 3-е касание луча. Готовься покупать!"); Alert("Внимание. На инструменте ", Symbol(), " ожидается 3-е касание луча. Готовься покупать!"); return (true); } } return (false); } //+-------------------------------------------------------------------------------------+ //| Блок поиска своих объектов | //+-------------------------------------------------------------------------------------+ bool GetSignal() { if (!IsObjectFound()) return (SIGNAL_NO); if (objPrice1 > objPrice2) return (SIGNAL_BUY); if (objPrice1 < objPrice2) return (SIGNAL_SELL); } //+-------------------------------------------------------------------------------------+ //| Блок поиска своих объектов | //+-------------------------------------------------------------------------------------+ bool IsObjectFound() { for (int obj=0; obj<=ObjectsTotal()-1; obj++) { objName = ObjectName(obj); isObj = ObjectFind(objName); objPrice1 = ObjectGet(objName, OBJPROP_PRICE1); objPrice2 = ObjectGet(objName, OBJPROP_PRICE2); objPriceCurr = ObjectGetValueByShift(objName,0); } Print("objPriceCurr = ", objPriceCurr); if (isObj != -1) // Если объект найден, значит выходим из функции return (true); return (false); // Объект не найден } //+-------------------------------------------------------------------------------------+ //| Функция start | //+-------------------------------------------------------------------------------------+ int start() { int signal = GetSignal(); if (IsObjectFound() == false) { Print("В окне отсуствуют объекты, поиск продолжается..."); return (0); } if (signal != SIGNAL_NO) if (!AlertByTouching(signal)) return (0); Print("objPrice1 = ", objPrice1, ", objPrice2 = ", objPrice2); // Print("objPriceCurr = ", objPriceCurr); return (0); }isObjは int 型である。オブジェクトが存在する場合、そのオブジェクトが含まれるウィンドウを返します。存在しない場合は、-1を 返すと理解しています。ドキュメントによると、メインウィンドウが0から 始まり、サブウィンドウが...ということです。ここまでは、トレーディング用Expert Advisorの概要で、純粋なシグナルです。でも、好きなときにメッセージを出す。 1...221222223224225226227228229230231232233234235...432 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
プログラム実行時の資源消費を抑えるという観点から、変数型(int、doubleなど)の宣言はどこにするのが最適か。例えば、int i はグローバルに宣言することも、int start() の中で宣言することもできます ... for (int i=OrdersTotal()-1; i>=0; i--) ....externパラメータの直後にグローバルレベルで一度宣言するよりも、tick毎に宣言する方がコストがかかる気がするのですが。 それともリソースインテンシブの差は同じなのでしょうか?
すべての変数(メモリー位置)はプログラム開始時に一旦作成され、その後、本文中に出てくるところで初期化する必要がありますが(変数宣言)、必ずしもそうなるとは限らないので、正常に動作させたい場合は、宣言時に明示的に初期化することを忘れないようにしましょう。
あなたのコードと一致するようにコードを修正しました。
テストの結果、4つの注文が最初のティックで設定順にクローズし、5つ目の注文が次のティックでクローズしました。おそらく、何度もテストしているので、ここがおかしいのでしょう。
プログラムのコードとテスターのログをお渡ししています。
敬具シュルキン
クリアです。交換
に。
次のような状況があります。
誤解のあるコードの一部を示しました。すべての変数はグローバルに宣言されています。IsObjectFound() 関数で、オブジェクトの最初の価格ポイントと2番目の価格ポイントの値、名前、現在のバーでのオブジェクトの価格値を取得します。オブジェクトが見つかった場合はtrue モードで, そうでない場合はfalse で関数を終了する必要があります.
スタート時に、オブジェクトが見つからなければ関数を終了するという条件を規定しました。
テスターで実行すると、オブジェクトは何も描かれておらず、何もない、むき出しのグラフが表示されます。それにもかかわらず、関数は終了せず、それに応じてプリントされません。
スタート機能は継続されます。これはどういうことなのでしょうか?
グローバル 変数はグローバル検索が可能です。データモデルを見ずに、アルゴリズムについて何が言えるのか?
データを正確にトレースしていく。そして,isObjは本当にbooleanで,その他もろもろ.
グローバル変数はグローバル検索が可能です。データモデルを見ずに、アルゴリズムについて何が言えるのか?
データを正確にトレースしていく。そして,isObjは本当にbooleanで,その他もろもろ.
isObjは int 型である。オブジェクトが存在する場合、そのオブジェクトが含まれるウィンドウを返します。存在しない場合は、-1を 返すと理解しています。ドキュメントによると、メインウィンドウが0から 始まり、サブウィンドウが...ということです。ここまでは、トレーディング用Expert Advisorの概要で、純粋なシグナルです。でも、好きなときにメッセージを出す。