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

 

ハンドブックより引用

//+------------------------------------------------------------------+

//| エキスパート初期化機能|
//+------------------------------------------------------------------+
intOnInit()
{
//--- カスタムインジケータの値を取得する
doublevalue=iCustom(_Symbol,_Period,"::IndicatorsGuideSampleIndicator.ex4",0,0);

初期化関数でインジケータ変数を参照 、スタート関数では参照しないのですか? 初期化関数でインジケータ変数を参照 すると、1つのポジションしか開きません。

 
遅くなってしまった。アーテム、明日返信できるかな?よろしくお願いします。
 
Oleg Kolesov:

ハンドブックより引用

//+------------------------------------------------------------------+

//| エキスパート初期化機能|
//+------------------------------------------------------------------+
intOnInit()
{
//--- カスタムインジケータの値を取得する
doublevalue=iCustom(_Symbol,_Period,"::IndicatorsGuideSampleIndicator.ex4",0,0);

初期化関数でインジケータ変数を参照 、スタート関数では参照しないのですか? 初期化関数でインジケータ変数を参照 すると、1つのポジションしか開きません。

Startの代わりにOnTick()などのイベントハンドラを使うのが王道です。旧MetaTrader 4の機能は忘れてください。新しいMQL4はMQL5に非常に近くなりました。唯一の違いは、取引関数とインジケータの構成が異なることです。これらはOnInit()ハンドラで作成され、インジケータハンドルが作成され、このハンドルへのデータアクセスが実行されるようになりました。MQL4では違います。しかし、リソースは私の記憶が変わらなければ、同じように配置されています。

また、計算されたデータへのアクセスは、通常のiCustom()を介したアクセスと大差なく、その名前が少し違うだけです。
Документация по MQL5: Обработка событий / OnTick
Документация по MQL5: Обработка событий / OnTick
  • www.mql5.com
//|                                                   TradeByATR.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Expert initialization function                                   |...
 
Oleg Kolesov:
遅くなってしまった。アーテム、明日返信できるかな? よろしくお願いします。

約束はできないが、忙しい。

後期 ...時51分は「遅い」です。

 
Artyom Trishkin:
  1. 注文設定価格は正規化されていません。
  2. すべての価格はStopLevelをチェックする必要があります。もし価格からの注文距離(ポイント)がStopLevelの値より小さい場合、エラー130 - invalid stopsが発生します。

それでも1つ注文が開くので、StopLevelの問題ではないと思います。しかし、次のチックではエラーが発生する

#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include  <Init_Deinit.mqh> 

// Переменные
extern double lots    = 0.01;
extern int    Level   = 300;
extern double StopL   = 300;
extern double TakeP   = 1000;


// Start Programm
void OnTick() 
  { 
  //--- вычисленные значений для BuyStop
   
   double price_buystop=NormalizeDouble (Ask+Level*Point, Digits);
   StopL =NormalizeDouble(price_buystop-StopL*Point,Digits); 
   TakeP =NormalizeDouble(price_buystop+TakeP*Point,Digits); 
   
//--- Размещаем отложный ордер BuyStop
   int ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,price_buystop,3,StopL,TakeP,"Rupture",1111,0,clrGreen); 
   if(ticket<0) 
     { 
      Print("BuyStop завершилась с ошибкой #",GetLastError()); 
          } 
   else 
      Print("Функция BuyStop успешно выполнена"); 
      }
 
Doszhan:

それでも1つ注文が開くので、StopLevelの問題ではないと思います。しかし、次のチックではエラーが発生する

ストップロスやスプレッドを下回っている場合はもちろんエラーになりますから、確認する必要があります。これが最初の1枚です。

文章から判断して、注文がすでに開かれているかどうかを確認することはできません。

この方法では、毎回のクリックで 無限大まで開くことになります。

 
Oleg Kolesov:

H=iCustom(NULL,TF,"::Indicators FilterKChange.ex4",History,Period_1,Period_2,MA_method,0,1);

コンパイラはエラーを発見しなかったが、テスターの動作がかなり遅くなった?正常なのでしょうか?

//-----------------------------------------------------------------------------------------------------------------

MQL4のマニュアルには、初期化 関数で変数を参照する

スタート関数ではなく、初期化 関数でインジケータ変数を参照 する 経験者の方、教えてください。

遅い場合は、インジケータを最適化-高速化する必要があります。

初期化 では1つの値しか受け取らないので、インジケータの値を確認したい場所を呼び出す必要があります。

 
nalyk:

3本目のバーでフラクタルを探しているのですが、そこにないかもしれません。サイクルの最初のフラクタルを探してください。


これもうまくいきません。ローソク足2本の高値・安値を基準に注文を出します。
 
Valerius:

ストップロスやスプレッドを下回っている場合はもちろんエラーになりますから、確認する必要があります。これが最初の1枚です。

文章から判断して、注文がすでに開かれているかどうかを確認することはできません。

そうでない場合は、ティック ごとに無限に開きます。

その通り、毎回のティックでは開かず、一度だけ開くのです。
 
Doszhan:
その通り、毎回のティックでは開かず、一度だけ開くのです。

ログブックにエラー130は ありませんか?

どこから来るのか、どうすれば回避できるのかの説明の上。

しなかったんですね。