mql5におけるOOP、テンプレート、マクロ、微妙な使い分け - ページ 27 1...202122232425262728 新しいコメント Vladimir Simakov 2020.03.24 07:15 #261 Seric29: そして、このクラス内のオブジェクトへのポインタをどうするか、どこに渡せばいいのか。 マクロに関しては、より簡単に作業できるようになりました。 どこでも作成されたオブジェクトを参照するために使用することができます。この例では、グローバルに生成されたオブジェクトへのポインタがコンストラクタに渡されますが、このクラス自体は別のクラス(オブジェクトが生成されるクラス)の中にネストすることができます。 マクロの使用例をご紹介します。 #define foor1(a,b,v,g) \ for(;Funkziya(a,b,v)&&g;b++) ... foor(a,b,c,isSomething?a>b:b>c){ DoSomething(); } ... どんな展開になるかは、わかりやすくするためにカッコを付けているので、ご覧ください。 for(;( Funkziya(a,b,c)&&isSomething)?a>b:b>c;b++){ DoSomething(); } その結果、コンパイラーにとっては絶対的に有効なコードができたが、プログラムの動作は意図したものとは断固として異なる。そして今、あなたは実際にエラーに気づかず、コードは動作し、そしてただターミナルを見つめ、なぜロボットが全預金でログインし、あなたの口座を失ったのか? ))))です。) 私はマクロが得意なのですが、それ故に、そして何故かとても嫌いなのです(開発者の方、もう一度constexprとSFINAEを同時にお願いします)。だから、私からのアドバイスは、コードの文字を減らすために使わないでほしいということです。実際、mqlのバージョンを落としても、強力なツールですが、非常に統制のとれたアプローチが必要です。 Seric29 2020.03.24 19:12 #262 開発者の皆さん、マクロや関数内で引数を無制限に使えるようにしてください。 この静的なナンセンスにうんざりしています。マクロの引数は8個で、108個必要なら最低10個にしてください。あと、マクロをオーバーロードできるようにして、新しい名前とマクロを掛け合わせる必要がないようにする。を作ると、またカッコよくなりますね。 #define Znah 0 #define PrmI int Peremen=6; #define PrmD double Peremen=3.345; #if Znah//если больше 0 то появится переменная int Peremen PrmI #else PrmD//иначе появится переменная double Peremen #endif マクロ#if Seric29 2020.03.24 19:13 #263 Vladimir Simakov: しかし、プログラムの動作は、意図したものとは決定的に異なっている。そして今、あなたがエラーに気づき、コードが動作し、そして、あなたは愚かにもターミナルを見て、なぜロボットが全体の預金で入力し、口座を失ったのか? ))))) マクロは得意なのですが、それゆえにあまり好きではありません(開発者の方、改めてconstexprとSFINAEを同時にお願いします)。だから、私からのアドバイスは、コードの文字を減らすために使わないでほしいということです。実際、mqlのバージョンを落としても、強力なツールですが、非常に統制のとれたアプローチが必要です。 何も推測せず、確実に仕事をこなしています。 CDataManager* m_data; m_data ポインターをどうするのですか?m_dataという 要素にアクセスしているのですか? 何が出てくるのですか?ここでもそうなんですね。 CNewBar(CDataManager* data=NULL):m_data(!data?new CDataManager:data),cIsDelData(!data){} CNewBar(string symbol,ENUM_TIMEFRAMES frame):m_data(new CDataManager(symbol,frame)),cIsDelData(true){} ただ、何を目指しているのかが明確でない(非常に複雑)。 この行はどうなるのでしょう CDataManager* m_data; が公開で書かれることになる。 授業は謎が多い。2年経った今でもどう扱っていいかわからない。 Igor Makanu 2020.08.29 20:06 #264 テスト結果の 統計情報をデータベースのテーブルに書き込む必要がある。 あらかじめDBを作成し、EAの設定にsinput変数を入れて、対象のパスを書き込む DATABASEです。 CREATE TABLE "TesterStatistics" ( "id" INTEGER, "MD5" TEXT, "STAT_PROFIT" REAL, "STAT_GROSS_PROFIT" REAL, "STAT_GROSS_LOSS" REAL, "STAT_MAX_PROFITTRADE" REAL, "STAT_MAX_LOSSTRADE" REAL, "STAT_CONPROFITMAX" REAL, "STAT_CONPROFITMAX_TRADES" INTEGER, "STAT_MAX_CONWINS" REAL, "STAT_MAX_CONPROFIT_TRADES" INTEGER, "STAT_CONLOSSMAX" REAL, "STAT_CONLOSSMAX_TRADES" INTEGER, "STAT_MAX_CONLOSSES" REAL, "STAT_MAX_CONLOSS_TRADES" INTEGER, "STAT_BALANCEMIN" REAL, "STAT_BALANCE_DD" REAL, "STAT_BALANCEDD_PERCENT" REAL, "STAT_BALANCE_DDREL_PERCENT" REAL, "STAT_BALANCE_DD_RELATIVE" REAL, "STAT_EQUITYMIN" REAL, "STAT_EQUITY_DD" REAL, "STAT_EQUITYDD_PERCENT" REAL, "STAT_EQUITY_DDREL_PERCENT" REAL, "STAT_EQUITY_DD_RELATIVE" REAL, "STAT_EXPECTED_PAYOFF" REAL, "STAT_PROFIT_FACTOR" REAL, "STAT_RECOVERY_FACTOR" REAL, "STAT_SHARPE_RATIO" REAL, "STAT_MIN_MARGINLEVEL" REAL, "STAT_CUSTOM_ONTESTER" REAL, "STAT_DEALS" INTEGER, "STAT_TRADES" INTEGER, "STAT_PROFIT_TRADES" INTEGER, "STAT_LOSS_TRADES" INTEGER, "STAT_SHORT_TRADES" INTEGER, "STAT_LONG_TRADES" INTEGER, "STAT_PROFIT_SHORTTRADES" INTEGER, "STAT_PROFIT_LONGTRADES" INTEGER, "STAT_PROFITTRADES_AVGCON" INTEGER, "STAT_LOSSTRADES_AVGCON" INTEGER, PRIMARY KEY("id" AUTOINCREMENT) ) このテーブルにこのコードで書き込んでいます。 DatabaseExecute(handleDB, StringFormat("INSERT INTO \"TesterStatistics\" " "VALUES (NULL, \'%s\',%G, %G, %G, %G, %G, %G, %d, %G, %d, %G, %d, %G, %d, " "%G, %G, %G, %G, %G, %G, %G, %G, %G, %G, %G, %G, %G, %G, %G, %G, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d);", md5txt, TesterStatistics(STAT_PROFIT), TesterStatistics(STAT_GROSS_PROFIT), TesterStatistics(STAT_GROSS_LOSS), TesterStatistics(STAT_MAX_PROFITTRADE), TesterStatistics(STAT_MAX_LOSSTRADE), TesterStatistics(STAT_CONPROFITMAX), (int)TesterStatistics(STAT_CONPROFITMAX_TRADES), TesterStatistics(STAT_MAX_CONWINS), (int)TesterStatistics(STAT_MAX_CONPROFIT_TRADES), TesterStatistics(STAT_CONLOSSMAX), (int)TesterStatistics(STAT_CONLOSSMAX_TRADES), TesterStatistics(STAT_MAX_CONLOSSES), (int)TesterStatistics(STAT_MAX_CONLOSS_TRADES), TesterStatistics(STAT_BALANCEMIN), TesterStatistics(STAT_BALANCE_DD), TesterStatistics(STAT_BALANCEDD_PERCENT), TesterStatistics(STAT_BALANCE_DDREL_PERCENT), TesterStatistics(STAT_BALANCE_DD_RELATIVE), TesterStatistics(STAT_EQUITYMIN), TesterStatistics(STAT_EQUITY_DD), TesterStatistics(STAT_EQUITYDD_PERCENT), TesterStatistics(STAT_EQUITY_DDREL_PERCENT), TesterStatistics(STAT_EQUITY_DD_RELATIVE), TesterStatistics(STAT_EXPECTED_PAYOFF), TesterStatistics(STAT_PROFIT_FACTOR), TesterStatistics(STAT_RECOVERY_FACTOR), TesterStatistics(STAT_SHARPE_RATIO), TesterStatistics(STAT_MIN_MARGINLEVEL), TesterStatistics(STAT_CUSTOM_ONTESTER), (int)TesterStatistics(STAT_DEALS), (int)TesterStatistics(STAT_TRADES), (int)TesterStatistics(STAT_PROFIT_TRADES), (int)TesterStatistics(STAT_LOSS_TRADES), (int)TesterStatistics(STAT_SHORT_TRADES), (int)TesterStatistics(STAT_LONG_TRADES), (int)TesterStatistics(STAT_PROFIT_SHORTTRADES), (int)TesterStatistics(STAT_PROFIT_LONGTRADES), (int)TesterStatistics(STAT_PROFITTRADES_AVGCON), (int)TesterStatistics(STAT_LOSSTRADES_AVGCON))); ENUM_STATISTICSの列挙は、ヘルプのように順序があり、スクリプトで確認することができます。 void OnStart() { for(int i = 0; i <= (int)STAT_LOSSTRADES_AVGCON; i++) printf("%d ^ %s", i, EnumToString(( ENUM_STATISTICS)i)); } はすべて動作しますが、コードのテキストは非常に大量であり、タイプミスの可能性が高いです、より信頼性の高い方法でデータベースにこのクエリを取得する方法 - 主な問題は、StringFormatに取得 する方法 です Alexandr Andreev 2020.08.29 22:19 #265 Igor Makanu:テスト結果の 統計情報をデータベースのテーブルに書き込む必要がある。あらかじめDBを作成し、EAの設定にsinput変数を入れて、対象のパスを書き込むDBです。このテーブルにこのコードで書き込んでいます。ENUM_STATISTICSの列挙は、ヘルプのように順序があり、スクリプトで確認することができます。はすべて動作しますが、コードのテキストは非常に大量であり、タイプミスの可能性が高いです、より信頼性の高い方法でデータベースにこのクエリを取得する方法 - 主な問題は、StringFormatに取得 する方法 です ディファイン!!!(ただし、ここでは通常のオーバーロードで十分です) そして、このStringFormatは何のためにあるのでしょうか? 普通のアドより全然速いんですけど...。(何十ギガバイトものテキストファイルをやったことがある=......)普通のアドオンでも速いんだから、そりゃあね...。 この正規の関数でやりたいのであれば、私もその問題は理解できません )) Igor Makanu 2020.08.30 08:08 #266 Alexandr Andreev:そして、この文字列の形式は何のためにあるのでしょうか?通常のアドよりも決して速くはないのですが...。(何十ギガバイトものテキストファイルをやったことがある=......)普通のアドオンでも速いんですよ、それが...。 どうだろう。 ヘルプと記事を読み、サンプルを使ってデータベースクエリを作成しました。 うまくいっているようですが、このコードの一部を使うと、タイプミスをする可能性があります。 全体的に変な感じなので、どうすれば失敗せずにコンパクトにできるかを聞いています )))) Maxim Kuznetsov 2020.08.30 09:18 #267 Igor Makanu:テスト結果の 統計情報をデータベースのテーブルに書き込む必要がある。あらかじめDBを作成し、EAの設定にsinput変数を入れて、対象のパスを書き込むDATABASEです。このテーブルにこのコードで書き込んでいます。ENUM_STATISTICSの列挙は、ヘルプのように順序があり、スクリプトで確認することができます。はすべて動作しますが、コードのテキストは非常に膨大で、タイプミスの可能性が高く、どのようにこのクエリをより信頼性の高い方法でデータベースに取得する - 主な問題は、どのようにStringFormatの まず、SQLiteではフィールドの型は任意であり、型付けやキャストに煩わされることはないことを覚えておいてください。ライト」であるのには理由があります。 長いクエリは3-4-5つのパートに分けることができます :-) BEGIN TRANSACTION INSERT INTO myTable VALUES (...); --- тут можно получить PrimaryKey UPDATE myTable .... ; --- обновить по Primary UPDATE myTable ... ; --- ещё... COMMIT ; --- это если все запросы удачны.. иначе ROLLBACK これは古い記憶ですが、つまり、ヘルプで確認する必要があります。 OOP, templates and macros SQL と MQL5:SQLite データベースとの連携 初心者のためのMQL5によるSP500取引戦略 Vladimir Simakov 2020.08.30 09:28 #268 Igor Makanu:どうだろう。ヘルプと記事を読み、サンプルを使ってデータベースクエリを作成しました。うまくいっているようですが、このコードを部分的に使うと、誤植が発生するのではないかと思っていますどうすれば失敗せずにコンパクトになるのか、お聞きしたいです ))) あなたの課題は、このように解決されるはずです。 string MakeRequest(string md5txt){ static ENUM_STATISTICS intIndex[]={STAT_CONPROFITMAX_TRADES, STAT_MAX_CONPROFIT_TRADES, STAT_CONLOSSMAX_TRADES, STAT_MAX_CONLOSS_TRADES, STAT_DEALS, STAT_TRADES, STAT_PROFIT_TRADES, STAT_LOSS_TRADES, STAT_SHORT_TRADES, STAT_LONG_TRADES, STAT_PROFIT_SHORTTRADES, STAT_PROFIT_LONGTRADES, STAT_PROFITTRADES_AVGCON, STAT_LOSSTRADES_AVGCON}; string ret="INSERT INTO \"TesterStatistics\" VALUES (NULL,"+md5txt; for (int i=0,ii=0;i<=STAT_LOSSTRADES_AVGCON;++i){ ret+=","; if (i==intIndex[ii]){ ret+=StringFormat("%d",(int)TesterStatistics((ENUM_STATISTICS)i)); ++ii;} else ret+=StringFormat("%G",TesterStatistics((ENUM_STATISTICS)i));} return ret;} DatabaseExecute(handleDB, MakeRequest("md5txt")); Igor Makanu 2020.08.30 09:37 #269 Vladimir Simakov:あなたの特別な問題は、このように解決されるはずです。 クソッ! そうだ、アレイだ! THANK YOU!!!!!!! Igor Makanu 2020.08.30 09:39 #270 Maxim Kuznetsov:SQLiteでは、フィールドの型はオプションで、型の指定やキャスティングに悩む必要はないと記憶しています。ライト」であるのには理由があります。長いクエリを3-4-5に分割することができます :-) BEGIN TRANSACTION INSERT INTO myTable VALUES (...); --- тут можно получить PrimaryKey UPDATE myTable .... ; --- обновить по Primary UPDATE myTable ... ; --- ещё... COMMIT ; --- это если все запросы удачны.. иначе ROLLBACK 古いメモリからなので、ヘルプで確認する必要があります。 私は、再現可能なクエリーコードが欲しいのですが、ググっても時間がかかります。 1...202122232425262728 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そして、このクラス内のオブジェクトへのポインタをどうするか、どこに渡せばいいのか。
マクロに関しては、より簡単に作業できるようになりました。
どこでも作成されたオブジェクトを参照するために使用することができます。この例では、グローバルに生成されたオブジェクトへのポインタがコンストラクタに渡されますが、このクラス自体は別のクラス(オブジェクトが生成されるクラス)の中にネストすることができます。
マクロの使用例をご紹介します。
どんな展開になるかは、わかりやすくするためにカッコを付けているので、ご覧ください。
その結果、コンパイラーにとっては絶対的に有効なコードができたが、プログラムの動作は意図したものとは断固として異なる。そして今、あなたは実際にエラーに気づかず、コードは動作し、そしてただターミナルを見つめ、なぜロボットが全預金でログインし、あなたの口座を失ったのか? ))))です。)
私はマクロが得意なのですが、それ故に、そして何故かとても嫌いなのです(開発者の方、もう一度constexprとSFINAEを同時にお願いします)。だから、私からのアドバイスは、コードの文字を減らすために使わないでほしいということです。実際、mqlのバージョンを落としても、強力なツールですが、非常に統制のとれたアプローチが必要です。
開発者の皆さん、マクロや関数内で引数を無制限に使えるようにしてください。 この静的なナンセンスにうんざりしています。マクロの引数は8個で、108個必要なら最低10個にしてください。あと、マクロをオーバーロードできるようにして、新しい名前とマクロを掛け合わせる必要がないようにする。を作ると、またカッコよくなりますね。
マクロ#if
しかし、プログラムの動作は、意図したものとは決定的に異なっている。そして今、あなたがエラーに気づき、コードが動作し、そして、あなたは愚かにもターミナルを見て、なぜロボットが全体の預金で入力し、口座を失ったのか? )))))
マクロは得意なのですが、それゆえにあまり好きではありません(開発者の方、改めてconstexprとSFINAEを同時にお願いします)。だから、私からのアドバイスは、コードの文字を減らすために使わないでほしいということです。実際、mqlのバージョンを落としても、強力なツールですが、非常に統制のとれたアプローチが必要です。
何も推測せず、確実に仕事をこなしています。
m_data ポインターをどうするのですか?m_dataという 要素にアクセスしているのですか? 何が出てくるのですか?ここでもそうなんですね。
ただ、何を目指しているのかが明確でない(非常に複雑)。
この行はどうなるのでしょう
が公開で書かれることになる。
授業は謎が多い。2年経った今でもどう扱っていいかわからない。
テスト結果の 統計情報をデータベースのテーブルに書き込む必要がある。
あらかじめDBを作成し、EAの設定にsinput変数を入れて、対象のパスを書き込む
DATABASEです。
このテーブルにこのコードで書き込んでいます。
ENUM_STATISTICSの列挙は、ヘルプのように順序があり、スクリプトで確認することができます。
はすべて動作しますが、コードのテキストは非常に大量であり、タイプミスの可能性が高いです、より信頼性の高い方法でデータベースにこのクエリを取得する方法 - 主な問題は、StringFormatに取得 する方法 です
テスト結果の 統計情報をデータベースのテーブルに書き込む必要がある。
あらかじめDBを作成し、EAの設定にsinput変数を入れて、対象のパスを書き込む
DBです。
このテーブルにこのコードで書き込んでいます。
ENUM_STATISTICSの列挙は、ヘルプのように順序があり、スクリプトで確認することができます。
はすべて動作しますが、コードのテキストは非常に大量であり、タイプミスの可能性が高いです、より信頼性の高い方法でデータベースにこのクエリを取得する方法 - 主な問題は、StringFormatに取得 する方法 です
ディファイン!!!(ただし、ここでは通常のオーバーロードで十分です)
そして、このStringFormatは何のためにあるのでしょうか?
普通のアドより全然速いんですけど...。(何十ギガバイトものテキストファイルをやったことがある=......)普通のアドオンでも速いんだから、そりゃあね...。
この正規の関数でやりたいのであれば、私もその問題は理解できません ))
そして、この文字列の形式は何のためにあるのでしょうか?
通常のアドよりも決して速くはないのですが...。(何十ギガバイトものテキストファイルをやったことがある=......)普通のアドオンでも速いんですよ、それが...。
どうだろう。
ヘルプと記事を読み、サンプルを使ってデータベースクエリを作成しました。
うまくいっているようですが、このコードの一部を使うと、タイプミスをする可能性があります。
全体的に変な感じなので、どうすれば失敗せずにコンパクトにできるかを聞いています ))))
テスト結果の 統計情報をデータベースのテーブルに書き込む必要がある。
あらかじめDBを作成し、EAの設定にsinput変数を入れて、対象のパスを書き込む
DATABASEです。
このテーブルにこのコードで書き込んでいます。
ENUM_STATISTICSの列挙は、ヘルプのように順序があり、スクリプトで確認することができます。
はすべて動作しますが、コードのテキストは非常に膨大で、タイプミスの可能性が高く、どのようにこのクエリをより信頼性の高い方法でデータベースに取得する - 主な問題は、どのようにStringFormatの
まず、SQLiteではフィールドの型は任意であり、型付けやキャストに煩わされることはないことを覚えておいてください。ライト」であるのには理由があります。
長いクエリは3-4-5つのパートに分けることができます :-)
BEGIN TRANSACTION
INSERT INTO myTable VALUES (...); --- тут можно получить PrimaryKey
UPDATE myTable .... ; --- обновить по Primary
UPDATE myTable ... ; --- ещё...
COMMIT ; --- это если все запросы удачны.. иначе ROLLBACK
これは古い記憶ですが、つまり、ヘルプで確認する必要があります。
どうだろう。
ヘルプと記事を読み、サンプルを使ってデータベースクエリを作成しました。
うまくいっているようですが、このコードを部分的に使うと、誤植が発生するのではないかと思っています
どうすれば失敗せずにコンパクトになるのか、お聞きしたいです )))
あなたの課題は、このように解決されるはずです。
あなたの特別な問題は、このように解決されるはずです。
クソッ!
そうだ、アレイだ!
THANK YOU!!!!!!!
SQLiteでは、フィールドの型はオプションで、型の指定やキャスティングに悩む必要はないと記憶しています。ライト」であるのには理由があります。
長いクエリを3-4-5に分割することができます :-)
BEGIN TRANSACTION
INSERT INTO myTable VALUES (...); --- тут можно получить PrimaryKey
UPDATE myTable .... ; --- обновить по Primary
UPDATE myTable ... ; --- ещё...
COMMIT ; --- это если все запросы удачны.. иначе ROLLBACK
古いメモリからなので、ヘルプで確認する必要があります。
私は、再現可能なクエリーコードが欲しいのですが、ググっても時間がかかります。