MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1178

 
Aleksey Mavrin:

は、テスターの話なのか、オンラインの話なのか?

オンラインの場合 - コードを見ると、どこかで移動イベントが正常にルーティングされていないことがわかります。サイト上の方法によってパネルだけ5種類のライブラリ、あなたは何を意味するのでしょうか?

そしてテスターでは......方法はないようで、なぜか。

全てのパネルオブジェクトに移動コマンドを送信後、ChartRedraw() を実行する。
 
Aleksey Mavrin:

テスターの話なのか、オンラインの話なのか。

オンラインの場合 - コードを見ると、どこかで移動イベントが正常にルーティングされていないことがあります。サイト上の方法によってパネルだけ5種類のライブラリ、あなたは何を意味するのでしょうか?

そしてテスターでは......方法はないようで、なぜか。

オンラインの話です。テスターでは本当に必要ないんです。ライブラリについては、私はプログラミングの専門家ではないので、よくわかりません。MQL5リファレンスから、ボタンのレディコードを取り出したところです。

もうやってしまったので、もっと安くなりますよ。ボタンの位置が次のティックで更新されるのは、このためらしい。背景と一緒にボタンも動くようにする方法がわかりません。

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Artyom Trishkin:
すべてのパネルオブジェクトに移動コマンドを送信した後、ChartRedraw()を実行します。
こうやってやってみたけど、うまくいかなかった。
   ObjectSetInteger(0, "Buy",            OBJPROP_XDISTANCE, x + 2);
   ObjectSetInteger(0, "Buy",            OBJPROP_YDISTANCE, y + 2);
   ChartRedraw();
  
   ObjectSetInteger(0, "Sell",           OBJPROP_XDISTANCE, x + 74);
   ObjectSetInteger(0, "Sell",           OBJPROP_YDISTANCE, y + 2);
   ChartRedraw();
 
よろしくお願いします。注文がトリガーされない場合、トレーリングを伴う保留中の 買いストップ注文を 開くためのトレーディングパネルのコードがあるのですが、どうすればいいですか?ジャーナルにエラーはなく、注文を変更しようともしていません。どの段階でエラーが発生したのか、
の関数を使ってログからたどってみました。
Print("Ордер Выбран!");

各if条件の後に挿入するだけです。

その結果、あの機能がわかったのです。

 for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))  

正常に注文を選択して次に進みますが、このコードの後にPrint("Order Selected!"); 挿入 されている場合

if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOp
en())

の場合、エラーが発生します。

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Invalid price] [無効な価格]を修正しました。

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modify #2 at 1.00000 (sl: 1.00000 tp: 1.00000) [invalid price].

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modification failed!結果 Retcode: 10015, Retcodeの説明: 価格が無効です。

私はオートトレード用の別のEAで同じコードを使用しています(唯一の違いは、そのようなコードがないことです)。

ObjectGetInteger(0, "Buy Stop", OBJPROP_STATE) == true


)で問題ないです。注文は問題なく開封され、修正されます。

以下は、コードそのものです。

     double Ask          = NormalizeDouble(PriceInformation_High_Buy[HighestCandle_High_Buy].high, _Digits) + indent; // максимум самой высокой свечи плюс отступ
     double sl_buy       = NormalizeDouble(PriceInformation_Low_Buy[LowestCandle_Low_Buy].low, _Digits) - indent;     // минимум самой низкой свечи минус отступ  
     double tp_buy       = Ask + ((Ask - sl_buy) * Профит_фактор);                                                    // количество стопов лоссов 
     
     if  (OrdersTotal()==0 && PositionsTotal()==0 &&                                         // проверка на наличие открытых позиций и ордеров
     ObjectGetInteger(0, "Buy Stop", OBJPROP_STATE) == true)                                 // проверка состояния кнопки
                                                                                             
     {
        atrade.BuyStop(Lots, Ask, _Symbol, sl_buy, tp_buy, ORDER_TIME_GTC, 0, "My comment"); // посылаем ордер Buy Stop
        ObjectSetInteger(0, "Buy Stop", OBJPROP_STATE, false);                               // отжимаем кнопку
     }

     else

     ObjectSetInteger(0, "Buy Stop", OBJPROP_STATE, false);                                  // отжимаем кнопку
       
//---Трейлинг Buy Stop---------------------------------------------------------------------------------------------------------------------------//     
      
        for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))                                                                      // выбираем ордер 
       
            if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen()) // проверяем символ, мэджик номер, цену
               
              {
                 if(aorder.OrderType()==ORDER_TYPE_BUY_STOP)
                 Print("Ордер Выбран!"); 
                 if(aorder.PriceCurrent()<aorder.PriceOpen())
                 
                    {
                     if(atrade.OrderModify(aorder.Ticket(),
                        asymbol.NormalizePrice(Ask),
                        asymbol.NormalizePrice(sl_buy),
                        asymbol.NormalizePrice(tp_buy),
                        aorder.TypeTime(),
                        aorder.TimeExpiration()))
                        Print("Модификация BUY STOP прошла успешно! Тикет ордера = ",atrade.ResultOrder());
                     else
                        Print("Модификация BUY STOP прошла с ошибкой! Result Retcode: ",atrade.ResultRetcode(),
                              ", description of Retcode: ",atrade.ResultRetcodeDescription());
                    }
              }

何が間違いなのか、教えてください。

 
Mikhail:

オンラインについてです。テスターでは本当に必要ないんです。ライブラリについては、私はプログラミングの完全なダミーなので、答えられません。MQL5リファレンスから、ボタンのレディコードを取り出したところです。

もうやった のですが、エラーが出ないので、まだ直せません。ボタンの位置が次のティックで 更新されるのは、このためらしい。背景と一緒にボタンも動くようにする方法がよくわかりません。

また、そのティックではなく、次のティックにあるとどうやって判断したのですか?)

 
Mikhail:
ご理解のほどよろしくお願いします。トレーディングパネルに買い逆指値注文を 出し、注文が失敗した場合は後続の注文を出すコードが必要です。注文は開かれていますが、注文の修正はありません。 ジャーナルにエラーは表示されず、注文の修正も試みられていません。どの段階でエラーが発生したかを、 という関数を使ってログで追ってみました。

各if条件の後に挿入するだけです。

その結果、この機能があることを知りました。

正常に注文を選択して次に進みますが、このコードの後にPrint("Order Selected!"); 挿入 されている場合

の場合、エラーが発生します。

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Invalid price] [無効な価格] を修正しました。

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modify #2 at 1.00000 (sl: 1.00000 tp: 1.00000) [invalid price].

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modification failed!結果 Retcode: 10015, Retcodeの説明: 価格が無効です。

私はオートトレード用の別のEAで同じコードを使用しています(唯一の違いは、そのようなコードがないことです)。


)で問題ないです。注文は問題なく開封され、修正されます。

以下は、コードそのものです。

何が間違いなのか、教えてください。

明らかにNormalizeが正常に動作していません。Unprint asymbol.Digits() asymbol.TickSize(),.Point() チェック .

 

皆さん、ごきげんよう。EAからDLLにアクセスする際に発生する問題です。

C:⇄Shablon.dll」を読み込めません

エラー487はERROR_INVALID_ADDRESSを 意味しているようですが、ライブラリへのパスは正しいです。実は、すでにこのDLLをすべてのフォルダに入れましたが、役に立ちません。

それは何でしょう?よろしくお願いします。


追伸:当初、このDLLは32bit用で、mt4*86で動作していました。64bit用に再コンパイルして、mt5*64に入れたら、このような問題が発生しました。



 
Aleksey Mavrin:

次のティックに何があって、そのティックに何がないのか、どうやって知ることができるのでしょうか?)

新しいティックが到着するまでは、ボタンの動きはありません。それが目で見てわかるんです。価格が 変わると同時に、ボタンが動きます。

今日、新しいティックでも、何も変えていないのに、ボタンが再描画されなくなりました。背景だけが動いている。
 
Aleksey Mavrin:

どうやらNormalizeがうまく働かないようです。Unprint asymbol.Digits() asymbol.TickSize(),.Point() チェック .

こんなクエリーを作ると

Print("Symbol ", _Symbol, " Digits ", _Digits, " Point ", Point());

こんな結果が出ます。

2020.06.17 13:49:53.270 2020.01.02 06:50:00 Symbol EURUSD_i Digits 5 Point 1e-05

このような要望を出すと

Print("Symbol ",aorder.Symbol(), " Digits ", asymbol.Digits(), " Point ", asymbol.TickSize());

こんな結果が出ます。

2020.06.17 13:51:58.787 2020.01.02 06:45:00 Symbol EURUSD_i Digits 0 Point 0.0

同時に、Print関数を 挿入しない場合は、全くエラーが発生せず、オーダーが自分自身を修正しようともしないことに注意したいと思います。まるでCTradeが私の注文を見ていないかのようです。

記号やマジックナンバーのチェックがうまくいかない。

Print("Symbol ", asymbol.Name(), " Magic ", aorder.Magic(), " Ticket ", aorder.Ticket()); 

結果

2020.06.17 14:37:38.147 2020.01.02 06:50:00 シンボルマジック 0 チケット 2

マジックナンバーは12345、記号はユーロドルです。

なぜシンボルとメディックが手に入らないのですか?

文字列を変更した場合。

aorder.Symbol()==asymbol.Name()

に変更されます。

aorder.Symbol()==_Symbol

で、マジックナンバーによるバリデーションを削除すると、価格に関する問題が発生します。

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Invalid price] [無効な価格] を修正しました。

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modify #2 at 1.00000 (sl: 1.00000 tp: 1.00000) [invalid price].

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modification failed!結果 Retcode: 10015, Retcodeの説明: 価格が無効です。

この同じコードが別のExpert Advisorでは問題なく動作するのに、私はすでに頭を悩ませています。

私は何を間違えているのだろう?

Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Данные типа double выводятся с точностью до 16 десятичных цифр после точки, при этом данные могут выводиться либо в традиционном либо в научном формате – в зависимости от того, как запись будет наиболее компактна. Данные типа float выводятся с 5 десятичными цифрами после точки. Для вывода вещественных чисел с другой точностью либо в явно...
 
dozolov:

皆さん、ごきげんよう。EAからDLLにアクセスする際に発生する問題です。

C:⇄Shablon.dll」を読み込めません

エラー487はERROR_INVALID_ADDRESSを 意味しているようですが、ライブラリへのパスは正しいです。実は、すでにこのDLLをすべてのフォルダに入れましたが、役に立ちません。

それは何でしょう?よろしくお願いします。


追伸:当初、このDLLは32bit用で、mt4*86で動作していました。64bit用に再コンパイルして、mt5*64に入れたら、こんな問題が。



ERROR_INVALID_ADDRESS はパスに関するものではありません。渡す引数を間違えている。