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

 
EQU:

そしてまた、コード...コード...。コードもいいけど......戦術、サイクルも......。;)

チャートに新しいバーを作成する旨のメッセージが表示されないか?信じられない...)))

イベントを作るのは問題ないのでしょうか? 少なくとも定義済みの変数なのでしょうか?

一般に、山のようなコードを埋めるより、イベントを処理する方が簡単です。しかも - エラーで (ERROR-FREE PROGRAMS DO EVER!!! )))))

新バーはイベントだからプログラム化してもいい(はず)というのは全く同感です。https://www.mql5.com/ru/forum/1031 に 枝があるので、自由に読んでください。でも、何年も悩んでいるんです......。

Z.I.これを読んだら、新しいバーがNEVERで出てくるかもしれないことがわかると思います。

Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5"
Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5"
  • www.mql5.com
Обсуждение статьи "Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5".
 
EQU:

もう一度、コード...コード...。コードもいいけど、戦術やループもいいよね。;)

チャートに新しいバーを 作成する旨のメッセージが表示されないか?信じられない...)))

イベントを作るのは問題ないでしょうか? せめて定義済みの変数にするとか?

一般に、山のようなコードを埋めるより、イベントを処理する方が簡単です。しかも - エラーで (ERROR-FREE PROGRAMS DO EVER!!! )))))

一般的には、どのように捉えているのでしょうか。20のタイムフレーム×シンボル数の「Market Watch」で、OnNewBarイベントがそれぞれ生成される? そして、どのシンボルとタイムフレームを参照しているかを判断するために、それぞれを処理する必要がある?自分自身の関数NewBarを書き、その中で新しいバーを受け取りたいものを定義します:あるシンボルのすべての期間、現在の期間のすべてのシンボル、またはいくつかの特別なケース。これによって、シンプルな機能が実現されています。これは、多くのチェックを伴う普遍的なOnNewBar関数よりも優れています。
 

テスト時、エラーが発生する

CTrade::PositionClose::OrderCheck: 無効なストップ(複数可)リクエスト
私のExpert Advisorでは、次のような行があります。

変数の記述

CTrade m_trade;

つかずはなれず

m_trade.PositionClose(_Symbol,eSlippage)。

なぜエラーが表示されるのですか?CTrade::PositionClose::OrderCheck: 無効なストップ(複数可)リクエスト

間違ったSLやTP
トレード_レトコード_無効なストップ数

ストップとポジションクローズはどう関係があるのでしょうか? それとも何か見落としているのでしょうか?

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
削除済み  
Prival:

新しいバーはイベントであり、プログラム化できる(すべき)というのは全く同感です。https://www.mql5.com/ru/forum/1031 にスレッドがあるので、自由に読んでいただければと思いますが、私は何年も前から戦っ...

Z.I. これを読んだら、新しいバーがNEVERで出てくるかもしれないことがわかると思うのですが...穴が...」と。

危険を冒してまでリンク先を見たのに...。本当に読んだ方がいいんだろうなぁ...暇な時にでも...;)

それが、このようなイベントを望む理由です...。バーがなければ、イベントもない。

削除済み  
Valmars:
実際、どのようなイメージですか?20のタイムフレーム×'Market Watch'のシンボル数で、それぞれOnNewBarイベントが生成される? そして、どのシンボルとタイムフレームを参照しているかを判断するために、それぞれを処理する必要がある?自分自身の関数NewBarを書き、その中で新しいバーを 受け取りたいものを定義します あるシンボルのすべての期間、現在の期間のすべてのシンボル、またはいくつかの特別なケース。その結果、特定かつ簡略化された機能を実現することができました。多くのチェックを行う普遍的なOnNewBar関数より優れています。

20タイムフレーム...ulongパラメータの限界ではない...1分間に1回変数全体を埋めるのが正しい、難しくない...。

なぜかというと、OnTickは「『マーケットウォッチ』の文字数をx個調べて、それぞれにイベントを発生させる」・・・?

そして、ビットチェックは、私を信じて、かなり速いものです...。

また、イベントでも

- 誰も私に加工をさせるつもりはない。

- また、イベントがあったとしても、必要に応じて、「自分でNewBar関数を書いて、新しいバーを取得するかどうかを定義する」-という追加や代用を妨げるものは何もありません...。

 
Interesting:

今でも、やり方さえわかれば簡単にできます。開発者は、OnTrade()を書き直し、そこに必要なパラメータを追加することを約束しました。

このような状況は、OnTick() や OnTime() -取引操作の 場所でローカルに処理されることを妨げるものではありません。

軽さとは相対的な概念で、ある人はグラムで、ある人はトンで測ります。私のExpert Advisorでは、私の言語にはPROSTOの亜種が存在しないため、(私のコードがそう呼ばれるのであれば)簡単に行う必要がありました(存在する可能性は十分にありますが、イマイチです)。それに、コードが100行も長くなって、より複雑な印象を与えるようになったことも、特に嬉しくなかったですね。

ここで、一般的な問題点を説明します。

ティックが来て、インジケータがクローズする必要性を示し、私はクローズする。

次のティックが来ると、インジケータはクローズしなければならないと表示し、どうしたらいいのかわかりません。ポジションはすでにポジションしているので、もちろん現時点での状況を知ることは可能ですが、わからないのです。

なぜ、この複雑さがここに残っているのか理解できないのですが?なぜ、何が起こったかを理解するために、onTrade()イベントで膨大なコードを書かなければならないのか理解できません。

私はシンプルでありたいと思っている。そして、それがないとき、私は悲しくなる。

 
Vladix:

軽さとは相対的な概念であり、ある人はグラムで、ある人はトンで測ります。私のコードがそう呼ばれるのであれば)EAでやらなければならなかったのですが、PROSTOの亜種は現在言語にはありません。それに、コードが100行も長くなって、より複雑な印象を与えるようになったことも、特に嬉しくなかったですね。

ここで、一般的な問題点を説明します。

ティックが来て、インジケータがクローズする必要性を示し、私はクローズする。

次のティックが来たとき、インジケータは閉じるべきであると示し、私は何をすべきかわからない - ポジションはすでにぶら下がっており、もちろん私は今何が起こっているかを調べることができますが、私は知りません。

なぜ、この複雑さがここに残っているのか理解できないのですが?なぜonTrade()イベントで、何が起こったかを理解するために大量のコードを書くよう提案されるのか理解できないのですが?

私はシンプルでありたいと思っている。そして、それがないとき、私は悲しくなる。

私はそうして、コードは100行未満です... :) ソリューションは、信頼性が高く、すぐに多通貨のために

//+----------------------------------------------------------------------------+
// Функция контроля открытия ордера на текущем баре               MQL5         |
//-----------------------------------------------------------------------------+
bool ЕстьОрдернаТекущемБаре(ENUM_ORDER_TYPE тип)
  {
   ulong тикет;
   HistorySelect(SeriesInfoInteger(СИМВОЛ,Period(),SERIES_LASTBAR_DATE),TimeCurrent());
   for(int i=0;i<HistoryDealsTotal();i=i+1)
     {
      тикет=HistoryDealGetTicket(i);
      if(HistoryDealGetString(тикет,DEAL_SYMBOL)!=СИМВОЛ || HistoryDealGetInteger(тикет,DEAL_ENTRY)==DEAL_ENTRY_STATE)// || HistoryDealGetInteger(тикет,DEAL_MAGIC)!=MAGIC
         continue;
      if(HistoryDealGetInteger(тикет,DEAL_TYPE)==тип || HistoryDealGetInteger(тикет,DEAL_TYPE)==DEAL_ENTRY_INOUT)
         return(true);
     }
   return(false);
  }
EAがホバリングしている期間ではなく、任意の期間を指定することができます。すなわち、注文は各期間に1回までとする

また、取引要求が あった後、30秒以内に取引要求を禁止するような遅延を設けるべきでしょう(例えば)。そうでない場合は、次のティックで注文が履歴に表示されないことがあります。
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
削除済み  
Valmars:
一般的には、どのようなイメージでしょうか?一般的には、「Market Watch」に20のタイムフレーム×シンボルの数があり、そのそれぞれに対してOnNewBarイベントが生成されるということでしょうか。 そして、それぞれのシンボルとタイムフレームを処理して、どれを参照しているのかを判断する必要があるのでしょうか。自分自身の関数NewBarを書き、その中で新しいバーを受け取りたいものを定義します:あるシンボルのすべての期間、現在の期間のすべてのシンボル、またはいくつかの特別なケース。その結果、特定かつ簡略化された機能を実現することができました。多くのチェックを伴う普遍的なOnNewBar関数よりも優れています。

標準的なソリューションで言えば、次のようなものです。

1.イベントは、オープン・チャート、その期間、シンボルにバインドされる必要があります。イベントは新しいバーが表示されたときに発生する必要があります(穴は無視されます)。

イベントは、別の端末スレッド(またはスレッド)で処理 する必要があります。

追記

で、その上で。もちろん、これは多くの仕様を考慮しない大まかな概算ですが...。

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

Vladix:

実は、問題そのものはこうなんです。

ティックが入ってきて、インジケータがクローズする必要があることを示すと、私はクローズを行う。

次のティックが来たとき、インジケータはそれが閉じなければならないことを示し、私は何をすべきかわからない - ポジションはすでにぶら下がっていると1つは、もちろん、どこにも瞬間に何が起こっているかを知ることができますが。

なぜ、このような複雑な状況が続いているのか、理解できません。なぜonTrade()イベントで、何が起こったかを理解するために大量のコードを書くよう提案されるのか理解できないのですが?

私はシンプルであることに賛成です。それがないとき、それは悲しいことになります。

おそらく、開発者はOnTrade()にパラメータを追加するでしょう、少なくとも彼らはそれを考えていました。私の知る限りでは、それに関する発言もあったようです。
 
Dmitriy2:

この方法で作ったので、100行より少ないコードで... :) ソリューションは信頼性が高く、すぐに多通貨に対応できます。

EAの休止期間の代わりに、任意の期間を指定することができます。つまり、注文は1期間に1回までとなります。

また、取引要求が あった後、30秒以内に取引要求を禁止するような遅延を設けるべきでしょう(例えば)。そうでない場合は、次のティックで注文が履歴に表示されないことがあります。

ディレイをかける - はい、承りました、何行のコードが必要でしょうか?また、多通貨ということであれば、それぞれの遅延を考慮する必要がありますよね?

これを解決するコードを書きました。ただ、私はそれが好きではないのです、申し訳ありませんが、あなたのものが好きではないのと同じように。そして、偏見ではなく、要は他に選択肢がない、シンプルでエレガントであることです。