エラー、バグ、質問 - ページ 452

削除済み  

ありがとうございました。

 
alexvd:

そうですね、最初の点については、明らかに混乱しています。具体的にどこがどう間違っていて、コピーを 返送すべきなのか説明してください。

また、連結についてですが、あなたの場合、次のように書くべきでした。

明確にすること。指定された位置の文字の値を変更した文字列のコピーを返す」とある。" 関数プロトタイプは、boolStringSetCharacter(...) です。明らかに、boolの中に文字列を入れることはできません。もし本当にbooleanが返されたなら、どうやらこれは成功/エラーのサインであるようだ。通 常、他のドキュメントページには 戻り値の項目が別に 用意されていますが、このページには ありません。追加し、本文中では戻り値ではなく、関数のセマンティクスに関する文章を策定すること。


連結についてですが、もしお書きになったことが正しいのであれば、StringConcatenate関数の 記述も変更する必要があります。説明では、string_var パラメータは 連結の結果として生成される [in][out] String であるとしています。このパラメータは[out]のみと記載していますね。

 
新しい質問です。BarsCalculatedが 0を返した場合、エラーにはならないようですが、どのようにしたら0本の棒が計算できるのでしょうか?実際、何も集計されていない。エラーにならないのか?
 
MoneyJinn:

残念ながら、このターミナルでは、コメント付きのポジションを 閉じる注文のみが「結果」タブに公開されることが問題です。

対応する注文はHistoryDealsTotal()のリストに追加されない。

注文の一般的なリスト HistoryOrdersTotal() では、ある程度冗長性のある期間を選択しても、注文は欠落しています。

テスト終了」までにクローズした場合の注文と案件の両方が履歴に残っていると断言できます。私のマルチカレンシーは、各シンボルで得られた利益を計算します。テスターで「テスト終了」までに決済された取引は、非初期化で反映されるよう修正されます。全シンボルの総利益は、テストレポートのデータと一致している。これがそのコードです。

       if(HistorySelect(0,TimeTradeServer()))   // Поправка для 'end of test'
        {
         int DeelsTotal=HistoryDealsTotal();
         for(int i=0;i<SymbolsNumber;i++)
           {
            ulong ticket=HistoryDealGetTicket(DeelsTotal-1-i);
            string comment=HistoryDealGetString(ticket,DEAL_COMMENT);
            if(comment!="end of test"&&StringSubstr(comment,0,3)!="so ")
               break;
            for(int j=0;j<SymbolsNumber;j++)
              {
               if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=m_expert[j].Name())
                continue;
               m_Profit[j]=m_Profit[j]+HistoryDealGetDouble(ticket,DEAL_PROFIT)+  // Добавим профит закрытой позиции для "end of test" и "so"
                           HistoryDealGetDouble(ticket,DEAL_SWAP)+HistoryDealGetDouble(ticket,DEAL_COMMISSION);
              }
           }
        }
削除済み  

SymbolInfoSessionTradeを Strategy Testerで動作させる方法はありますか?

些細なエントリーでは通用しない。

void OnTick() {
  datetime from, to;
  if (SymbolInfoSessionTrade(_Symbol, FRIDAY, 0, from, to)) Print("WOW!");
}
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5
削除済み  

できれば、もう1つ質問を。新オペレーターの 意味を理解したい。その背景にはどのような考え方があるのでしょうか。通常の方法でオブジェクトを作成してはいかがでしょうか。結局のところ、ブロックの終了後に new で宣言されたオブジェクトへのアクセスは失われるわけで、なぜそれが必要なのか?

追伸:正直なところ、ドキュメントでは見つけられませんでした :)

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5
 
220Volt:

できれば、もう1つ質問を。新オペレーターの 意味を理解したい。その背景にはどのような考え方があるのでしょうか。通常の方法でオブジェクトを作成してはいかがでしょうか。結局のところ、ブロックの終了後に new で宣言されたオブジェクトへのアクセスは失われるわけで、なぜそれが必要なのか?

どんなものでも、いつかは通るものです。何もしなくていいということでしょうか...?


追伸:正直なところ、ドキュメントでは見つけられませんでした :)

私はあなたを信じます...:))
 
Valmars:

ありがとうございました。図星だったんですね。TimeCurrent()の代わりにTimeTradeServer() を使用することが必要かつ十分である。

取引週の終わりには新しい相場がないため、TimeCurrent()は長い間更新されないのです。

Expert Advisor を非初期化する際、TimeCurrent() は時刻 23:00 を表示し、TimeTradeServer() は時刻 23:59 を表示しており、これはテストの終了時刻と一致しています。

 
MoneyJinn:

ありがとうございました。図星だったんですね。TimeCurrent()の代わりにTimeTradeServer() を使用することが必要かつ十分である。

取引週の終わりには新しい相場がないため、TimeCurrent()は長い間更新されません。

ポイントは、引用ではなく、「テスト終了」案件はテスト期間終了後に実行されるという点です。そのため、'OnTick' や 'OnTimer' は履歴からそれらを取得することができません。少なくとも1年前はそうだったので、彼らのチェックを'OnDeinit'に移動させました。
削除済み  
220Volt:

できれば、もう1つ質問を。新オペレーターの 意味を理解したい。その背景にはどのような考え方があるのでしょうか。通常の方法でオブジェクトを作成してはいかがでしょうか。結局のところ、ブロックの終了後にnewで宣言されたオブジェクトへのアクセスは失われるわけで、なぜnewが必要なのか?

P.S. 正直なところ、ドキュメントでは見つけられませんでした :)

動的なオブジェクトを作らないでください - あなたは今とこれらのオブジェクトに関連する他のすべてを使用する必要はありません(その後、あなたはあまり行うことができなくなりますが)。

今の意味ではなく、ダイナミックなオブジェクトを扱う意味を理解したい...。

動的に配置されたオブジェクトの初期化・非初期化

オブジェクトへのポインタは 特殊なケースで、ポインタを宣言しても当該オブジェクトの初期化は必要ないからです。オブジェクトの初期化は、対応するクラスのコンストラクタの呼び出しを意味 します。クラス内に対応するコンストラクタがない場合、単純型の メンバは自動的に初期化されず、文字列 型、動的配列 型、複合オブジェクト 型のメンバが自動的に初期化されます。

ポインタはローカルまたはグローバルに宣言でき、空のNULL 値で初期化するか、同じ型または生成された 型のポインタで初期化することが可能である。ローカルレベルで宣言されたポインタに対してnewを 呼び出した場合、そのポインタに対するdelete文も ローカルレベルを離れる前に実行しなければ ならない。そうでない場合は、ポインタが失われ、オブジェクトを明示的に削除することはできません。

pointer_object=new_ClassName式で生成されたオブジェクトは その後 delete(pointer_object) 演算子ですべて 破棄しなければ ならない。何らかの理由でこの変数が削除オペレータによって 破棄されなかった場合、その旨のメッセージがExperts Journalに表示されます。複数の変数を宣言し、そのすべてに同じオブジェクトへのポインタを割り当てることができます。

動的に生成されるオブジェクトにコンストラクタが ある場合、new演算子の実行時にこのコンストラクタが呼び出さ れます。オブジェクトにデストラクタが ある場合、delete 演算子が実行されるとデストラクタが 呼び出されます

このように、動的に配置されるオブジェクトは new演算子で生成されたときのみ生成さ れ、プログラムアンロードの瞬間にdelete 演算 子かMQL5実行システムによって自動的に 削除されることが保証 されています。動的に生成されるオブジェクトのポインタ宣言順序は、その初期化順序に影響を 与えません。初期化および非初期化の順序は、プログラマが完全に制御することができます。