エキスパートアドバイザー - 雑多な質問 - ページ 32

 

( このコメントを書く前に、私は解決策を見つけるために乱暴に調査したと思います、ええ、私は同様のスレッドを見つけましたが、私はこの問題の解決策を見つけられませんでした。)

私は以下のコードを売り注文 に使い、ストップロスをpipsで表示します。ストップロスがプラスに変わるまで正しい値を表示します。
だから、私はこの問題を解決するために何かを試すことができますどのように私はアイデアを持っていません。

何か良いコメントがあれば、お願いします。
( 注意: 私は今のところトレーリングストップは使っていません。また、以下のコードは情報更新のためだけで、OrderSend()やそれに類するものではありません。)

if(OrderType()==OP_SELL || (OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP))
  {
   riskinpips=change_to_pips(OrderStopLoss()-OrderOpenPrice());
  }
Print("stop loss in pips",DoubleToString(riskinpips,2));

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

ストップロスで利益が出た場合

( 注意: 私の問題を説明するために写真編集プログラムで作成したスクリーンショットラベル )
 

最高値から最低値を引いたものが結果となるので、どれが最高値なのか確認 することができます

if(OrderStopLoss()>OrderOpenPrice())
{
  // orderstoploss - orderopenprice
}

else if(OrderOpenPrice()>OrderStopLoss())
{
  // orderopenprice - orderstoploss
}
 
Marco vd Heijden:

最高値から最低値を引いたものが結果になるので、どれが最高値か確認することができます。

if(OrderStopLoss()>OrderOpenPrice())
{
  // orderstoploss - orderopenprice
}

else if(OrderOpenPrice()>OrderStopLoss())
{
  // orderopenprice - orderstoploss
}

決して気にしない自分を笑うだけです。これは、私の助けになると思います。すぐにでも試してみます。

マルコ さん、ありがとうございました。

 

#利益通貨計算 - 終了しました。

今のところ完璧に動作しています。
Marco vd Heijden@whroeder1 に感謝します。

 

#Time - オープン

私は自分のEAのための時間/クロックについて研究し始めたので。私は、著者がそれのためにインジケータでstart()JUSTを使用しているのを見ます。
私のEAではOnTimer()とOnTick()を使っているので、start()は使いたくありません。
というわけで、Time and Clock機能にはどの特殊関数が 良いのか、確認/学習する必要があります。

10時間後、この問題について研究を続けるつもりです。
( 注:Mql5.com Codebase pageからいくつかのTime and Clock指標をすでに見つけました - しかし、私はコピー&ペーストするのが好きではありません )

何か良いコメント、フォーラムの共有、リンクと何か他のものは私のために良いだろう。

事前にありがとうございます。

 

開始関数は、スクリプトでのみ OnStartに 置き換えられます。エキスパートアドバイザーとインジケーターでは、それぞれOnTickと OnCalculateに 名前を変更する必要があります。mql5プログラムの動作中に実行されるコードは、これらの3つの関数に配置する必要があります。

参照:https://www.mql5.com/en/docs/migration

Documentation on MQL5: Moving from MQL4
Documentation on MQL5: Moving from MQL4
  • www.mql5.com
Moving from MQL4 - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

開始関数は、スクリプトでのみ OnStartに 置き換えられます。エキスパートアドバイザーとインジケーターでは、それぞれOnTickと OnCalculateに 名前を変更する必要があります。mql5プログラムの動作中に実行されるコードは、これらの3つの関数に配置する必要があります。

ありがとうございますそんなにもっと@Marco この共通は私のためにとても有益です。私はすでに "MQL4からMQL5への移行 "をお読みください。
 
Max Enrik:

#Time - オープン

私がEAの時間/クロックについて研究し始めたときから。私は、自分のEAの時間/時計について研究し始めたので、著者がそのためのインジケータでstart()を使用しているのを見ました。
私はEAでOnTimer()とOnTick()を使っているので、start()は使いたくありません。
というわけで、Time and Clock機能にはどの特殊関数が 良いのか、確認/学習する必要があります。

10時間後、この問題について研究を続けるつもりです。
( 注:Mql5.com Codebase pageからいくつかのTime and Clock指標をすでに見つけました - しかし、私はコピー&ペーストするのが好きではありません )

何か良いコメント、フォーラムの共有、リンクと何か他のものは私のために良いだろう。

事前にありがとうございます。

OnTimer() を使用します。

TimeLocal() を使用すると見栄えが良くなりますが、ブローカのタイムゾーンに同期しません。

TimeCurrent() を使用すると、ブローカーと同期されますが、ティックの到着時刻によっては、数秒遅れることがありますし、「ジャンプ」することもあります。この例では、この問題を強調します。

#property strict

int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

void OnTimer()
  {
   Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
  }
 

#時間 - 終了

honest_knave:

OnTimer()を使用します。
TimeLocal() を使用すると見栄えが良くなりますが、ブローカのタイムゾーンに同期しません。
TimeCurrent() を使用すると、ブローカーと同期されますが、ティックの到着時刻によって数秒遅れることがあります。この例では、この問題を強調しています。

#property strict

int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

void OnTimer()
  {
   Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
  }
非常に有用なコメント です。本当にありがとうございます。
 

取引、自動取引システム、取引戦略のテストに関するフォーラム

エキスパートアドバイザー - 雑多な質問

honest_knave, 2016.11.30 01:28

IMHOは、OnChartEvent()と_lotCalc()に分けるのではなく、すべてのロット計算を一緒にしておくとよいでしょう。最小/最大/ステップをチェックし、インクリメント/デクリメントを行う関数を1つ。

void OnChartEvent(const int      id     , // Event ID
                  const long   & lparam , // Parameter of type long event
                  const double & dparam , // Parameter of type double event
                  const string & sparam   // Parameter of type string events
                  )
{
    _lotCalc();
    //-------Process Button---------------------------------------------------------|
    if ( sparam == _btnLotMinus )
    {
        ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
        _lotSize = fmax(_lotMin, _lotSize-_lotStep);
        _calcUpdade( CALC_CHANGE_LOT );
        printf( " | Lot: %.2f  ", _lotSize );
        return;
    }   //---if Close
    //                          ...
}

void _lotCalc()
{
    //---
    _lotMin  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MIN  );
    _lotMax  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MAX  );
    _lotStep = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_STEP );

    //---
}

#ロットステップ - リオープン

@honest_knave- ロットサイズとロットステップについて最大の助けをありがとうございました。

ロットサイズ >= ( ロットステップ * 100 ) " のとき、ロットステップが " ロットステップ * 100 " だけ増加するようにコードのこの部分を改良する必要があるんです。

// lot plus
if(sparam==lotbuttonplus)
  {
   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? lotstep*10 : lotstep));

// global variable
   infoupdate();

   printf("Lot: %.2f ",lotsize);
   ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
   return;
  }

事前に感謝します。