MQL5言語をゼロから独学で学ぶ - ページ 84 1...7778798081828384 新しいコメント 削除済み 2021.11.29 07:29 #831 Georgiy Merts #:そういうことだ!そして、『誰も見ていない』と言うんですね。誰も興味を示さない-だから誰も見ていない(ピエロは興味を示さない-見ていない)。興味を持った人-見たことがある人 その道化師に対してモデレーターに苦情を送り、あなたが追放されるまでそうするつもりです。 Georgiy Merts 2021.11.29 07:36 #832 Vladimir Baskakov #: その道化師についてモデレーターに苦情を送り、あなたが追放されるまでそうするつもりです。 ああ、ハリネズミを素っ裸で脅かして...。 削除済み 2021.11.29 07:37 #833 Georgiy Merts #:ああ、ハリネズミを素っ裸で脅かして...。 急いではいない。 Alexey Viktorov 2021.11.29 08:11 #834 Georgiy Merts #:問題がわからない。そうですね。配列が埋め尽くされた状態で宣言され、その後、他のデータで再び埋め尽くされます。私見ですが、初心者にはかなり許容範囲の広いエラーだと思います。しかし、それはエラーなのでしょうか?変数や配列を宣言するときは、必ず即座に入力しなければならない。宣言した時点で正確な値がわからない場合は、無効であることを承知の上で記入する。初期化せずに変数を宣言して使用すると、ランダムな値が入ってしまい、作業中にその値が使われ、作業結果が不正確になり、問題を発見するのが非常に難しくなります(私は何度も発見しました)。しかし、変数が生成された直後に無効な値で初期化された場合、初期化されていない変数を使用した場合、その変数に何らかのゴミが入っていることがすぐにわかり、それがどこから来たのか、初期化せずに使用したことが容易にわかる。ですから、個人的には、すでに入力されている配列を宣言するのは良い方法だと思います。しかし、そこではWRONG_VALUEの値を取るべきでしょう。 私は、変数や配列まで初期化することに全く反対ではありません。例えば、このように int ExtHandle[21] = {}; も初期化された配列になります。しかし、OnInit()で配列全体を埋めてしまうので、この場合はこれすら必要ない。だから、私は必要性を感じないのです。そして、リンゴを持ったピノキオでさえ、ここではうまくいかない。なぜなら、値を使う(読む)前に、値はすでに初期化されているからだ。 Georgiy Merts 2021.11.29 08:19 #835 Alexey Viktorov #:私は、変数や配列まで初期化することに全く反対ではありません。例えば、このようにも初期化された配列になります。しかし、OnInit()では配列全体が埋め尽くされているため、この特定のケースではこれさえも必要ではありません。だから、私は必要性を感じないのです。なぜなら、値を使う(読む)前に、値はすでに初期化されているからです。 え...また、どこで「初期化」されるのでしょうか?コード上、このような配列はゴミでいっぱいになってしまいます。 私見ですが、作成時に無効でない値で初期化するのは、すでに述べたようにグッドプラクティスだと思います。 int ExtHandle[3] = {WRONG_VALUE;WRONG_VALUE;WRONG_VALUE}; もちろん、配列が大きければ、このような方法で埋めるのは無理があるので、この場合はDEBUG版を使って、大きな配列でも無効でない値で埋め、RELEASE版では埋めないようにしています。 この方法によって、私は初期化されていない変数を使うことから何度も救われました。 Alexey Viktorov 2021.11.29 08:47 #836 SanAlex #:コード内のあなたの名前 - あなたが設定したコード 私は知っているあなたの名前の下に作成しました。しかし、うまくいかなかった。 さて、あなたの手際の悪さは誰のせいでしょう? 画像では、計算値が9.08253、変換後が9.08となり、小数点以下16桁の1について教えてくれないことがわかります。 また、最小音量より小さい値を取得した場合にも 表示するために別の変数を入力する必要があったのですが...。 Alexey Viktorov 2021.11.29 08:59 #837 Georgiy Merts #:えー...また、どこで「初期化」されるのでしょうか?コード上、このような配列はゴミだらけになってしまう。私見ですが、作成時に無効な値で初期化するのは、すでに述べたようにグッドプラクティスだと思います。もちろん、配列が大きければ、このような方法で埋めるのは無理があるので、この場合はDEBUG版を使って、大きな配列でも無効でない値で埋め、RELEASE版では埋めないようにしています。この方法によって、私は初期化されていない変数を使うことから何度も救われました。 ここ、ハイライトされたループの中です。そして、私が話していたのは1つのアレイだけだったという事実にもご注目ください。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム MQL5をゼロから独学で学ぶ サン・アレックス さん 2021.11.29 07:17 ということなのでしょうか? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 私がどこからコードを盗んだのか、教えてください。 //+------------------------------------------------------------------+ //| Copyright 2021, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //--- #include <Trade\Trade.mqh> //--- CTrade ExtTrade; //+------------------------------------------------------------------+ input double MaximumRisk = 0.02; // Maximum Risk in percentage //--- int ExtHandle[]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; double LotsRisk[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; string symb_name[]= {"EURUSD","GBPUSD","USDCHF","USDJPY","USDCAD","AUDUSD","AUDNZD", "AUDCAD","AUDCHF","AUDJPY","CHFJPY","EURGBP","EURAUD","EURCHF", "EURJPY","EURNZD","EURCAD","GBPCHF","GBPJPY","CADCHF","GBPAUD" }; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- ExtTrade.SetExpertMagicNumber(0); ExtTrade.SetMarginMode(); //--- for(int i=0; i<20; i++) { ExtTrade.SetTypeFillingBySymbol(symb_name[i]); //--- Moving Average indicator ExtHandle[i]=iMA(symb_name[i],_Period,12,6,MODE_SMA,PRICE_CLOSE); if(ExtHandle[i]==INVALID_HANDLE) { printf("Error creating MA indicator"); return(INIT_FAILED); } } //--- return(INIT_SUCCEEDED); } 台詞に関係ないコードは全て削除しました。まあ、ほとんど全部ですけどね...。 Georgiy Merts 2021.11.29 09:34 #838 Alexey Viktorov #:その場で、ハイライトされたループの中に。そして、私が話していたのは1つのアレイだけだったという事実にもご注目ください。 はい、その通りです。私見では、通常の練習。 SanAlex 2021.11.29 13:00 #839 SanAlex #:こちらはほぼ完成しています。あとは不要な非機能を削除するだけです。この多通貨 Expert Advisor は、この "MACD Sample.mq5" からです。 動作に不必要なものはすべて削除したようです。味に磨きをかけてから、ここに掲載することにしています。 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ これは私が今までに得たものです - 多分誰かがもっとうまくやるでしょう ファイル: 00001_Mult.mq5 15 kb MrBrooklin 2021.12.01 10:30 #840 Alexey Viktorov #:本当に書かないでほしい...。以下は、動作する関数です。 リスクサイズを入力するだけで、完全なフリーマージンからではなく、カウントされます...。 皆さん、ご機嫌いかがでしょうか? 配列の理解や検討に時間がかかりましたが、12通貨ペアのリスクを計算する関数のコードを自分で書いたので、結果はすでに出ています。 ウラジミールさん、ありがとうございます。 //+------------------------------------------------------------------+ //| Входные параметры советника | //+------------------------------------------------------------------+ input double Risk0=1.0; //Риск для валютной пары EURUSD (% от баланса) . . . . input double Risk11=1.0; //Риск для валютной пары EURJPY (% от баланса) //+------------------------------------------------------------------+ //| Функция Money_Management рассчитывает размер лота в зависимости | //| от риска, заданного во входных параметрах советника. | //+------------------------------------------------------------------+ double Money_Management() { //--- объявляем динамический массив double risk[]; //--- устанавливаем размер массива ArrayResize(risk,12); //--- заполняем массив значениями риска ArrayFill(risk,0,1,Risk0); ArrayFill(risk,1,1,Risk1); ArrayFill(risk,2,1,Risk2); ArrayFill(risk,3,1,Risk3); ArrayFill(risk,4,1,Risk4); ArrayFill(risk,5,1,Risk5); ArrayFill(risk,6,1,Risk6); ArrayFill(risk,7,1,Risk7); ArrayFill(risk,8,1,Risk8); ArrayFill(risk,9,1,Risk9); ArrayFill(risk,10,1,Risk10); ArrayFill(risk,11,1,Risk11); //--- double price=0.0; double margin=0.0; double MaximumRisk=risk[11]/100; //--- if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,price)) return(0.0); if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,price,margin)) return(0.0); if(margin<=0.0) return(0.0); //--- double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); //--- double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*MaximumRisk/margin,2); //--- if(lot<min_volume) lot=min_volume; if(lot>max_volume) lot=max_volume; return(lot); } //+------------------------------------------------------------------+ 1...7778798081828384 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そういうことだ!
そして、『誰も見ていない』と言うんですね。誰も興味を示さない-だから誰も見ていない(ピエロは興味を示さない-見ていない)。興味を持った人-見たことがある人
その道化師についてモデレーターに苦情を送り、あなたが追放されるまでそうするつもりです。
ああ、ハリネズミを素っ裸で脅かして...。
ああ、ハリネズミを素っ裸で脅かして...。
問題がわからない。
そうですね。配列が埋め尽くされた状態で宣言され、その後、他のデータで再び埋め尽くされます。私見ですが、初心者にはかなり許容範囲の広いエラーだと思います。
しかし、それはエラーなのでしょうか?
変数や配列を宣言するときは、必ず即座に入力しなければならない。宣言した時点で正確な値がわからない場合は、無効であることを承知の上で記入する。初期化せずに変数を宣言して使用すると、ランダムな値が入ってしまい、作業中にその値が使われ、作業結果が不正確になり、問題を発見するのが非常に難しくなります(私は何度も発見しました)。
しかし、変数が生成された直後に無効な値で初期化された場合、初期化されていない変数を使用した場合、その変数に何らかのゴミが入っていることがすぐにわかり、それがどこから来たのか、初期化せずに使用したことが容易にわかる。
ですから、個人的には、すでに入力されている配列を宣言するのは良い方法だと思います。しかし、そこではWRONG_VALUEの値を取るべきでしょう。
私は、変数や配列まで初期化することに全く反対ではありません。例えば、このように
も初期化された配列になります。しかし、OnInit()で配列全体を埋めてしまうので、この場合はこれすら必要ない。だから、私は必要性を感じないのです。そして、リンゴを持ったピノキオでさえ、ここではうまくいかない。なぜなら、値を使う(読む)前に、値はすでに初期化されているからだ。
私は、変数や配列まで初期化することに全く反対ではありません。例えば、このように
も初期化された配列になります。しかし、OnInit()では配列全体が埋め尽くされているため、この特定のケースではこれさえも必要ではありません。だから、私は必要性を感じないのです。なぜなら、値を使う(読む)前に、値はすでに初期化されているからです。
え...また、どこで「初期化」されるのでしょうか?コード上、このような配列はゴミでいっぱいになってしまいます。
私見ですが、作成時に無効でない値で初期化するのは、すでに述べたようにグッドプラクティスだと思います。
もちろん、配列が大きければ、このような方法で埋めるのは無理があるので、この場合はDEBUG版を使って、大きな配列でも無効でない値で埋め、RELEASE版では埋めないようにしています。
この方法によって、私は初期化されていない変数を使うことから何度も救われました。
コード内のあなたの名前 - あなたが設定したコード 私は知っているあなたの名前の下に作成しました。しかし、うまくいかなかった。
さて、あなたの手際の悪さは誰のせいでしょう?
画像では、計算値が9.08253、変換後が9.08となり、小数点以下16桁の1について教えてくれないことがわかります。
また、最小音量より小さい値を取得した場合にも
表示するために別の変数を入力する必要があったのですが...。
えー...また、どこで「初期化」されるのでしょうか?コード上、このような配列はゴミだらけになってしまう。
私見ですが、作成時に無効な値で初期化するのは、すでに述べたようにグッドプラクティスだと思います。
もちろん、配列が大きければ、このような方法で埋めるのは無理があるので、この場合はDEBUG版を使って、大きな配列でも無効でない値で埋め、RELEASE版では埋めないようにしています。
この方法によって、私は初期化されていない変数を使うことから何度も救われました。
ここ、ハイライトされたループの中です。そして、私が話していたのは1つのアレイだけだったという事実にもご注目ください。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
MQL5をゼロから独学で学ぶ
サン・アレックス さん 2021.11.29 07:17
ということなのでしょうか?
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
私がどこからコードを盗んだのか、教えてください。
台詞に関係ないコードは全て削除しました。まあ、ほとんど全部ですけどね...。
その場で、ハイライトされたループの中に。そして、私が話していたのは1つのアレイだけだったという事実にもご注目ください。
はい、その通りです。私見では、通常の練習。
こちらはほぼ完成しています。あとは不要な非機能を削除するだけです。この多通貨 Expert Advisor は、この "MACD Sample.mq5" からです。
動作に不必要なものはすべて削除したようです。味に磨きをかけてから、ここに掲載することにしています。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
これは私が今までに得たものです - 多分誰かがもっとうまくやるでしょう
本当に書かないでほしい...。
以下は、動作する関数です。
リスクサイズを入力するだけで、完全なフリーマージンからではなく、カウントされます...。
皆さん、ご機嫌いかがでしょうか?
配列の理解や検討に時間がかかりましたが、12通貨ペアのリスクを計算する関数のコードを自分で書いたので、結果はすでに出ています。
ウラジミールさん、ありがとうございます。