orderopenpriceが開かれた後の最高値を取得するにはどうしたらよいですか?

 

親愛なる皆さん。

誰か以下のリンクをチェックして、私の質問(どのように私はorderopenpriceが開かれた後、最高を取得することができます)に答えることができます。

http://www.forexfactory.com/showthread.php?t=307937

 
string PriceToStr(double p){ return( DoubleToStr(p, Digits) ); }
:
datetime    OOT         = OrderOpenTime();          // Assumes OrderSelect() done already
int         iOOT        = iBarShift(NULL,0, OOT);   // Bar of the open.
#define     iBarCURRENT   0                         // Include current bar.
int         nSince  = iOOT - iBarCURRENT + 1;       // No. bars since open.
int         iHi         = iHighest(NULL,0, MODE_HIGH, nSince, iBarCURRENT);
double      HH          = High[iHi];                // Highest high.
Print( "High since order opened on ", TimeToStr(OOT)," is ", PriceToStr(HH) );
 
WHRoeder:


上記のコードに対するエラーは以下の通りです。

'(' -function definition unexpected D:\Program Files-MetaTrader Malta - MetaExperts Filter2.mq4 (343, 18)

this error forstring PriceToStr(double p)

このエラーの場合 どうしたら直せるか分からない


'iBarCurrent' - variable not defined D:\Program Files-MetaFXDD Malta - MetaTrader 4╱experts╱test2.mq4 (348, 30)

このエラーは、#define iBarCURRENTを定義してから iBarCurrentとして それを置くからです。

修正します。


2 error(s),

 

この行をCodeの一番最後に、start関数の 外に置いて ください ... ...

string PriceToStr(double p){ return( DoubleToStr(p, Digits) ); }

そして、もしあなたがコードを学びたいのなら、これを読み始めてください: https://book.mql4.com//

 

RaptorUKとWHRoederのお二人です。

ありがとうございます。

datetime    OOT         = OrderOpenTime();          // Assumes OrderSelect() done already
int         iOOT        = iBarShift("EURUSD",PERIOD_H1, OOT);   // Bar of the open.
#define     iBarCURRENT   0                         // Include current bar.
int         nSince  = iOOT - iBarCURRENT + 1;       // No. bars since open.
int         iHi         = iHighest("EURUSD",PERIOD_H1, MODE_HIGH, nSince, iBarCURRENT);
double      HH          = High[iHi];                // Highest high.
int         iLi         = iLowest("EURUSD",PERIOD_H1, MODE_LOW, nSince, iBarCURRENT);
double      LL          = Low[iLi];                 // Lowest low. 

もう一つ質問があります。

私が2つの注文を持っている場合、買いと売りのために1つを開いた。

どのように私は私のEAは、iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // オープンのバーを理解し、取ることができるようにすることができます。私はそこから買いポジションを取得し、その時点から最高値を計算したバーについて。

そして

iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // オープンのバーを取ります。私はそこから売りポジションを取得し、そのポイントから最低を計算したバーのために。

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

 
OOTを取得するには、すでにorderSelectを実行している必要があります。
for(pos = OrdersTotal()-1; pos >= 0 ; pos--) if (
    OrderSelect(pos, SELECT_BY_POS)                 // Only my orders w/
&&  OrderMagicNumber()  == magic.number             // my magic number
&&  OrderSymbol()       == Symbol()                 // and my pair.
){
    datetime    OOT         = OrderOpenTime();          // Assumes OrderSelect() done already
    int         iOOT        = iBarShift("EURUSD",PERIOD_H1, OOT);   // Bar of the open.
    #define     iBarCURRENT   0                         // Include current bar.
    int         nSince      = iOOT - iBarCURRENT + 1;   // No. bars since open.
    if (OrderType == OP_BUY){
        int     iHi         = iHighest("EURUSD",PERIOD_H1, MODE_HIGH, nSince, iBarCURRENT);
        double  HH          = High[iHi];                // Highest high.
    }
    else{
        int     iLi         = iLowest("EURUSD",PERIOD_H1, MODE_LOW, nSince, iBarCURRENT);
        double  LL          = Low[iLi];                 // Lowest low. 
    }
}
 
WHRoeder:
OOTを取得するには、すでにorderSelectを行っている必要があります。


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

また、他の質問もあります。

この条件はどうすればよいのでしょうか。もし(売りの最後の注文終値() > 売りの最後の注文終値の前)&& ( 売りの最後の注文終値の前 >= bid)

ポジションを閉じる

というような感じでOKでしょう。

if ( (OrderType == OP_SELL)&& OrderSelect(pos+1, SELECT_BY_POS,MODE_TRADES ) )          { if( pos>pos+1  && pos+1>MarketInfo("EURUSD",MODE_BID);
            // close the position


 

ちょうど。

私はどのように取得することができます知りたい:私はいくつかの計算のためにそれらを追加するには、最後の注文(オープンまたはクローズ)価格()(買いまたは売り)の前の順序を。

ありがとうございます。

 
ただ、最後の注文の前に、買いでも売りでも、その注文がオープンオーダーであってもクローズオーダーであっても、注文を取得する必要があります。
 
Hand:
私はどのように取得することができます知りたい:最後の注文(オープンまたはクローズ)価格()(買いまたは売り)のためのいくつかの計算のためにそれらを追加するには。
最後の注文を見つける、覚えて、次の以前のものを見つける。
    for(pos = OrdersTotal()-1; pos >= 0 ; pos--) if (
        OrderSelect(pos, SELECT_BY_POS)                 // Only my orders w/
    &&  OrderMagicNumber()  == magic.number             // my magic number
    &&  OrderSymbol()       == Symbol()                 // and my pair.
    ){
       datetime OOTlatest = OrderOpenTime();  // found latest open order
       break;
    }
    for(pos--; pos >= 0 ; pos--) if (
        OrderSelect(pos, SELECT_BY_POS)                 // Only my orders w/
    &&  OrderMagicNumber()  == magic.number             // my magic number
    &&  OrderSymbol()       == Symbol()                 // and my pair.
    ){
       datetime OOTprevious = OrderOpenTime(); // found the previous
       break;
    }
    if (OOTlastest == 0) // no open orders
    if (OOTprevious == 0) // no previous
:
 

WHRoederさん、ありがとうございます。

本当に助かりました。もし、最後の買い注文と売り注文を取得する必要があるなら、次のようにしてそれらを比較します。

if ( the last orderopenforbuy == OOTlastest )

{ 何かをする }.

else

{ }....................以下のコードが動作します。

for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if (
    OrderSelect(pos, SELECT_BY_POS)                 // Only my orders w/
&&  OrderMagicNumber()  == magic.number             // my magic number
&&  OrderSymbol()       == Symbol()                 // and my pair.
){
    if (OrderType() == OP_BUY){
        int lastorderforbuy= OrderOpenPrice();
    }
    else{
        int lastorderforsell= OrderOpenPrice(); 
         }
    }   for(pos--; pos >= 0 ; pos--) if (
        OrderSelect(pos, SELECT_BY_POS)                 // Only my orders w/
    &&  OrderMagicNumber()  == magic.number             // my magic number
    &&  OrderSymbol()       == Symbol()                 // and my pair.
    ){
       if (OrderType() == OP_BUY){
        int previousorderforbuy= OrderOpenPrice();
    }
    else{
        int previousorderforsell= OrderOpenPrice(); 
         }
     } 
    if ( ((lastorderforbuy+ previousorderforsell)/2)<=MarketInfo("EURUSD",MODE_BID))
               {  CLOSESHORT("EURUSD") ;}