Wie kann ich den höchsten Preis erhalten, nachdem die Bestellung geöffnet wurde?

 

Liebe Leute,

kann jemand den untenstehenden Link überprüfen und meine Frage beantworten (wie kann ich den höchsten Preis erhalten, nachdem die Bestellung geöffnet wurde).

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:


Hier sind einige Fehler für den obigen Code.

'(' - Funktionsdefinition unerwartet D:\Programmdateien\FXDD Malta - MetaTrader 4\experts\test2.mq4 (343, 18)

dieser Fehler für den String PriceToStr(double p)

für diesen Fehler ich weiß nicht, wie ich ihn beheben kann


'iBarCurrent' - Variable nicht definiert D:\Programmdateien\FXDD Malta - MetaTrader 4\experts\test2.mq4 (348, 30)

dieser Fehler, weil Sie #define iBarCURRENT definieren , dann setzen Sie es als iBarCurrent

Ich werde ihn beheben.


2 Fehler(s),

 

Fügen Sie diese Zeile ganz am Ende Ihres Codes außerhalb der Startfunktion ein...

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

und fangen Sie an, dies zu lesen, wenn Sie programmieren lernen wollen: https://book.mql4.com//

 

Es ist klar Jungs ( RaptorUK und WHRoeder ),

Vielen Dank dafür.

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. 

Ich habe eine andere Frage:

Wenn ich 2 Orders geöffnet habe, eine für Kauf und die andere für Verkauf:

Wie kann ich meinen EA verstehen lassen und die iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Bar der Eröffnung nehmen. Für die Bar, dass ich kaufen Position von ihm und berechnen Sie die höchste von diesem Punkt.

Und

Nehmen Sie die iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Bar der Eröffnung. Für die Bar, dass ich verkaufen Position von ihm und berechnen Sie die niedrigste von diesem Punkt.

Vielen Dank!

 
Um OOT zu erhalten, müssen Sie bereits einen orderSelect durchgeführt haben
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:
Um OOT zu erhalten, müssen Sie bereits einen OrderSelect durchgeführt haben


Vielen Dank, Leute.

Ich habe noch eine andere Frage:

Wie kann ich diese Bedingungen erfüllen: if (last OrderClosePrice() for sell > before the last OrderClosePrice for sell ) && ( before the last OrderClosePrice for sell >= bid)

schließe die Position

ist so etwas wie das Folgende in Ordnung

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


 

Einfach,

Ich möchte wissen, wie ich: den Auftrag vor dem letzten Auftrag (öffnen oder schließen) Preis() für (kaufen oder verkaufen) zu erhalten, um sie für einige Berechnungen hinzugefügt.

Vielen Dank.

 
Keine Antwort, nur ich brauche, um die Reihenfolge vor der letzten Bestellung auch für Kauf oder Verkauf, auch dass die Reihenfolge ist es offen, um oder schließen, warten auf Ihre Hilfe.
 
Hand:
Ich möchte wissen, wie kann ich: die Reihenfolge vor der letzten Bestellung (öffnen oder schließen)Preis() für (kaufen oder verkaufen), um sie für einige Berechnungen hinzugefügt.
Finden Sie die letzte Bestellung, denken Sie daran, finden Sie die nächste frühere ein.
    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
:
 

Danke WHRoeder,

Für Ihre wirkliche Hilfe. wenn ich die letzte Bestellung für Kauf und die letzte Bestellung für Verkauf erhalten muss, dann vergleichen Sie sie, indem Sie tun:

wenn ( die letzte Kaufbestellung == OOTlastest )

{ etwas tun }

sonst

{ } ....... ist der untenstehende Code wird funktionieren.

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") ;}
Grund der Beschwerde: