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

 
CTradeは 成功した... 全てやり直すのに必要なのはファイルだけだ... 再びヘリコプター潜水艦... そして、私は方法が分からないと言った、ブームはない...:)
 

ああ...原理的には同じなんだけどな...。

 

新造は、ループ内の単純な 構造をコピーすることをやめた。以下はテストスクリプトです。

//+------------------------------------------------------------------+
//|                                             Test_Copy_Struct.mq5 |
//+------------------------------------------------------------------+
struct  trade_settings
  {
   int      reopened;
   int      reverse; 
   int      TrailingStop;
   int      WithoutlossLevel;
   int      WithoutlossProfit;
   double   LossToReverse;
   int      MAPeriod;
   int      MA_use;
   double   Lots;
   int      takeprofit; 
  };
trade_settings arr_tr_set_ini[3]={  
 {60,90,1000,100,900,2000.0,105,1,0.13,2700},   // EURUSD
 {130,1298,400,300,600,1000.0,130,1,0.1,2800},  // GBPUSD
 {110,140,200,600,800,1000.0,85,0,0.15,1700}};   // AUDUSD 
trade_settings symb_default={110,130,200,1300,1500,3000.0,100,1,0.1,1000};

class CTest_Copy_Struct
  {  
protected:
   trade_settings    m_tr_set;
public:
   void              Copy_tr_set(const trade_settings& tr_set){m_tr_set=tr_set;}
   void              Print_tr_set(){printf("Setting reopened=%u overpos=%u TrailingStop=%u WithoutlossLevel=%u WithoutlossProfit=%u" 
                        ,m_tr_set.reopened,m_tr_set.reverse,m_tr_set.TrailingStop,m_tr_set.WithoutlossLevel,m_tr_set.WithoutlossProfit);
                        printf("LossToReverse=%.2f MAPeriod=%u MA_use=%u Lots=%.2f takeprofit=%u"
                        ,m_tr_set.LossToReverse,m_tr_set.MAPeriod,m_tr_set.MA_use,m_tr_set.Lots,m_tr_set.takeprofit);}
   void              Zero(){ZeroMemory(m_tr_set);} 
  };

void OnStart()
  {
   CTest_Copy_Struct Test; 
   Test.Zero();
   Test.Print_tr_set();
   Print("------------------------------");
   Test.Copy_tr_set(arr_tr_set_ini[0]);
   Test.Print_tr_set();
   Print("------------------------------");
   Test.Copy_tr_set(arr_tr_set_ini[2]);
   Test.Print_tr_set();
   Print("------------------------------");
   Test.Copy_tr_set(symb_default);
   Test.Print_tr_set();
   int total=ArraySize(arr_tr_set_ini);
   for(int i=0;i<3;i++)
     {
      Print("i=",i);
      Test.Copy_tr_set(arr_tr_set_ini[i]);
      Test.Print_tr_set();
     } 
  }
//+------------------------------------------------------------------+
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
Valmars:

結果

2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Access violation read to 0x00000000209FFFAC in 'E:♪Program FilesChampionship_2011 ♪MQL5 ♪Scripts ♪Test_Copy_Struct.ex5
2011.11.13 09:30:44 テスト_コピー_構造 (EURUSD,M15) i=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=3000.00 MAPeriod=100 MA_use=1 Lots=0.10 takeprofit=1000
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) 設定 reopened=110 overpos=130 TrailingStop=200 WithoutlossLevel=1300 WithoutlossProfit=1500
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------ ※このテストは、EURUSD,M15を対象にしたものです。
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=1000.00 MAPeriod=85 MA_use=0 Lots=0.15 takeprofit=1700。
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD, M15) Setting reopened=110 overpos=140 TrailingStop=200 WithoutlossLevel=600 WithoutlossProfit=800を設定。
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------ ※このテストは、EURUSD,M15を対象にしたものです。
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=2000.00 MAPeriod=105 MA_use=1 Lots=0.13 takeprofit=2700
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) 設定 reopened=60 overpos=90 TrailingStop=1000 WithoutlossLevel=100 WithoutlossProfit=900
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------ ※このテストは、EURUSD,M15を対象にしたものです。
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=0.00 MAPeriod=0 MA_use=0 Lots=0.00 takeprofit=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=0 overpos=0 TrailingStop=0 WithoutlossLevel=0 WithoutlossProfit=0

 

https://www.mql5.com/ru/docs/basis/function/events 最後に、「よりよく理解するためには、以下にコードを添付したインジケータを実行するのが有効 です。"

コードを実行します。週末によりよい理解は起こらなかった。そのままでよかったと思うのだが、最悪の印象が加わってしまった。週末はティックがないので、タイムフレームからタイムフレームへ移動する際、この時間帯は常にprev_calculated= 0となります。

しかし、ある時、この値が表示される(再接続はしない、素直にNobly!)

とチャート上におかしな線が描かれる。

あるいは、このように楽しさが半減する。

冒頭にはZigZagの形のセリフもあった(残念ながらスクリーンショットを撮り忘れて再現できなかった)。

線は他のTFにも現れるが、よりまばらである。自分の目で簡単に確認することができます。

作者が言いたかったことは、まさにこのことだったのでしょうか。

prev_calculated の結果が、おかしいとまではいかないまでも、少なくとも刻みがない状態で不等間隔になるのはなぜですか?TFからTFへジャンプする際に、何か不具合が発生しているのでしょうか?

これらの(あるいは他の)線は、ティックの外側に現れるべきだったのでしょうか?

まれに、TFからTFへ比較的頻繁にジャンプすることで、ヒストリーのバー値の計算を開始する疑似ティックのようなものが発生することがあるのでしょうか。

端末の不安定な動作は解消されると考えてよいのでしょうか?それとも数学を学んだ方がいいのでしょうか?

もしかして、やりたくないことをやろうとしているのかな?その場合、自分の主張を正当化してください。

いろいろと聞きたいことがあるのですが・・・。しかし、これはまだ始まりに過ぎない......。

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

続き...

同リンクに「注意:OnCalculate関数がNULL値を返す場合、クライアント端末のDataWindowにインジケータ値は表示されません。"

ここからが本題...必要であれば、どんな腕の伸びも快く承諾し、すぐに矯正に走ります。でも。単純・中複雑な指標であれば、多少のつまずきは何とかしのげるでしょう。しかし、コードがより複雑になると、コピー...() の任意の関数(引数として別の指標のハンドルを取ると、それなしの両方)は、私は個人的に、1週間前にMQLのプログラミングを扱うと思うように、状況を複雑にし始めます。なぜなら、変更できるものはすべて変更されており、残りの部分は、問題とは関係ないので、変更してはいけないと私には思えるからです。あるいは、端末の特性や気まぐれを考慮に入れていないため、アルゴリズム全体を変えてしまおうという、なんとも心もとない考えも出てくる。結局、ドキュメントでMQLを勉強しながら、開発者がうっかり口をつぐんでしまったニュアンスと向き合わなければならないのです。そして、MQLプログラマーは、ドキュメントを完全に勉強した後では、決して多くのことを学べない...。そして何より残念なのは、MQLを使うと、ターミナルの多くの迷いを全く修正できないか、怪しげな松葉杖を使って、ある日痛烈なクラッシュを起こすか...です。

まあ...今日はちょっとおかしくなってしまった。週末ですからね。

そして、今朝、私が伝えたかったことは...。

https://www.mql5.com/ru/forum/1111/page570#comment_117425- 最初の端末起動時にインジケータがレンダリングされないという主な問題を完全に解決しました(ティックがなくても履歴全体でフラクタルインジケータが正しくレンダリングされることを妨げるものはないということに誰も異議を唱えないことを望みます?)

そうでした。

            CopyHigh(_Symbol,PERIOD_M1,TimeUpBuffer[shift+1]-1,
                                    TimeUpBuffer[shift],
                                    exact_extremum);

に置き換えた。

            if(CopyHigh(_Symbol,PERIOD_M1,TimeUpBuffer[shift+1]-1,
                                       TimeUpBuffer[shift],
                                       exact_extremum)<0) return(0);

私の不注意と、その結果として生じた悪質な形式主義を認めます。

でも。一番シンプルなケースで役に立ちました(最初のインジケータをわざとシンプルにしました)。より複雑な指標では、これらの操作は役に立ちませんでした。ある瞬間には変化が見られず、特にコピー機能が多くなった現在では、その差は歴然としています。そして、次にどこへどう行けばいいのか、ぜひとも賢明なご指導をお願いしたいものです。結局、箱から出して動くものには、これだけの時間がかかるのです。今のところ、私のせいなのか端末のせいなのかすらわからない。しかも、イフやリターンが ないだけでは......。あちこちで怪しまれているようですが、例えば、他のような...。

必要であれば、私の個人的な開発者にコードを送ります。似たようなコードも添付できますが、別の方法で実装されていて、問題なく動作します(ただし、私が探求しているタスクや目標には全く合いません)。

 
Print-functionのログ処理は、Terminal Expertsタブのほか、RAMやディスク上のファイルにも記録されますが、これは別のプロセスなのでしょうか?分離しているようで、ターミナルはフリーズしないのですが、集中的なログ処理の際に、まるでレンガを積んだように遅くなるのはなぜでしょうか?アンロードする方法はないのでしょうか?中程度のArraySizeの配列要素を 出力することにした場合、遅延が顕著になり、より大きなサイズの配列要素の値を一度に出力することは忘れてしまう。
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 

端末がキャッシュをいじっている疑いが濃厚です(ほとんど抜けてるので...)。さらに悪いことに、MetaEditorでさえ、その時ターミナルで起こっていることの処理に何らかの影響を及ぼします。

MQLプログラム(Expert Advisorのタブログにデバッグデータを出力する)のコードを修正して再コンパイルし、ターミナルウィンドウにアクセスすると、以前の結果が繰り返されるという問題に何度も遭遇しましたが、以前の未完成プログラムの遅延再作成のようなものではないことは間違いないです。そこで、コンパイルして更新したコードをF7でMetaEditorに送ると、その間ターミナルは古いコードを再生するコマンドを取得します(キャッシュから、あるいはOSによるメモリページの「ごまかし」みたいなもの)。興味深いことに、「歯がゆい」以前のバージョンの.ex5-codeを元に戻す/アンロードするには、terminal.exeプロセスを完全にアンロードするだけでなく、まれに、MetaEditorを終了するだけでも可能な場合があります。私は個人的に観察したことを述べただけなので、お好きなように理解してください。

最近、デザインにこだわる場面がありました。

Print(1);
for(int e=0; e<ArraySize(Arr); e++)
{
   Print(Arr[e]);
}
チャートには最初のPrintの値だけが表示されますが、配列の要素の 出力を待っても無駄でした。最初のPrintを削除して再コンパイルすると、配列項目の循環的な出力が即座に開始されました。MQL5-Communityに対するPrintsの秘密の陰謀なのか、それとも私だけがこんなに不運なのか?

さらに、ターミナルの奇妙な動作は、チャートウィンドウ、グラフィカルオブジェクト、MQL プログラムでオーバーロードされた MT5 インスタンスではなく、単一のクリーンなチャートウィンドウ(実行中のインジケータのアウトラインを除く)で観察されたことを指摘しておきたいと思います。

削除済み  
x100intraday 問題点は忘れて、C言語や他の言語で書いてください。結局、端末から必要なのは、相場と口座情報の取得と注文の実行だけで、あとは専用のプログラミング環境に書いて、ライブラリでつなげばいいのです。そうでないと、瞬間的に何かを変えてしまい、プロジェクトが大きいと、なぜうまくいかないのかの答えが出なくなる。そんな冒険は必要ないですよ :)とExpert Advisorは、同時に再コンパイルし、現在の注文のメンテナンスに追いつくためにキャッチアップしている場合は、何を、なぜ見つける必要がありますので、お金を失うことになる...。
 
ivandurak:

1.ArrayInitializeのコードが機能していません。ループをアンコメントすると、すべてがうまくいきます。

また、クラス内の変数とグローバルレベルのインジケータを同じ名前で宣言した場合、警告が表示されます。

1.PlotIndexSetDouble(z,EMPTY_VALUE)は、イナイトの指標バッファに使用されます。

2.ポップアップで表示されます。その場合は、クラスのメンバに "m_"というプレフィックスをつけてマークすることをお勧めします。

Документация по MQL5: Пользовательские индикаторы / PlotIndexSetDouble
Документация по MQL5: Пользовательские индикаторы / PlotIndexSetDouble
  • www.mql5.com
Пользовательские индикаторы / PlotIndexSetDouble - Документация по MQL5