Hilfe benötigt - Seite 8

 
qgmql:

Ist dieser Code in Ordnung? Wenn nicht, dann schreiben Sie bitte einen Code anstelle des Links, ich bin immer noch verwirrt.


NEIN https://www.mql5.com/en/forum/133792/page3#550831

gibt den Pipwert für ein Lot, das mit einem bestimmten Symbol gehandelt wird

 

1. Es sind einige Kaufaufträge geöffnet und ein schwebender Kaufauftrag ist platziert. Alle Aufträge sind im gleichen Währungspaar. Wie wird ein EA nur den letzten geöffneten Auftrag auswählen, um seine Stop-Limits zu überprüfen?

2. Jede geöffnete Order wurde zu unterschiedlichen Preisen mit tp 20 platziert. Ist es für den EA möglich, alle geöffneten Orders außer der letzten zu modifizieren und ihre Stop-Limits auf die Stop-Limits der zuletzt geöffneten Order zu ändern?

BEISPIEL:

Sr    type   price     tp
1     buy    1.23950   1.23750
------------------------------
#  buylimit   1.23750   1.23550

//////////////////////////////

1    buy     1.23950   1.23550 // tp modified and now equal to 2nd tp
2    buy     1.23750   1.23550 // 2nd tp
------------------------------
#  buylimit   1.23550   1.23350

//////////////////////////////

1    buy     1.23950   1.23350 // tp modified and now equal to 3rd tp
2    buy     1.23750   1.23350 // tp modified and now equal to 3rd tp
3    buy     1.23550   1.23350 // 3rd tp
------------------------------
#  buylimit   1.23350   1.23150
 

Einige Verwirrung mit...

//Signal Filter
#define  XXX   0
#define  AAA   1
#define  BBB   2

int SignalS = XXX;

if(SignalS & AAA !=0)
OrderSend(NULL, OP_BUY, LotSize, Ask, Slippage, SL, TP, WindowExpertName(), MagicID, 0, Blue);

Der alte Editor akzeptiert die markierten Zeilen, aber der neue Editor gibt die Warnung "Expression not boolean"

Ich habe dann versucht...

if(SignalS && AAA !=0)
//or
if(SignalS !=0 & AAA !=0)

Jetzt akzeptiert der neue Editor beide, aber... welcher funktioniert genauso wie die hervorgehobene Zeile? wenn beide wahr sind, welchen sollte ich dann verwenden? (bequemer?)

PS: Untenstehender Code wird auch vom neuen Editor akzeptiert...

if((SignalS & AAA) !=0)

Der neue Editor akzeptiert alle drei, aber... welcher funktioniert genauso wie die hervorgehobene Zeile? wenn alle wahr sind, welcher ist dann praktischer für mich?

 
qgmql: Der neue Editor akzeptiert alle drei, aber... welche funktioniert genauso wie die hervorgehobene Zeile? Wenn alle zutreffen, welche ist dann für mich praktischer ?
  1. Verwenden Sie keine Bitmaske
    //Signal Filter
    #define  XXX   0
    #define  AAA   1
    #define  BBB   2
    
    int SignalS = XXX;
    
    if(SignalS & AAA !=0)
    enum eSignals = {XXX, AAA, BBB};
    
    eSignals SignalS = XXX;
    
    if(SignalS == AAA)
    
    Selbstdokumentierender Code.

  2. Eine Bitmaske verwenden:
    Auf Build 600+ hat != einen höheren Vorrang als bitweise und, Sie MÜSSEN
    (SignalS & AAA) !=0
    Bei früheren Builds war bitweise und höher als Multiplikation

    Operation

    Beschreibung

    Reihenfolge der Ausführung

    ()

    []

    .

    Funktionsaufruf

    Referenzierung auf ein Array-Element

    Referenzierung auf ein Strukturelement

    Von links nach rechts

    !

    ~

    ++

    --

    (Typ)

    sizeof

    Logische Negation

    Bitweise Negation (Komplement)

    Vorzeichenwechsel

    Inkrement um eins

    Dekrementieren um eins

    Typisierung

    Bestimmung der Größe in Bytes

    Von rechts nach links

    *

    /

    %

    Multiplikation

    Division

    Modul-Division

    Von links nach rechts

    +

    Addition

    Subtraktion

    Von links nach rechts

    <<

    >>

    Linke Verschiebung

    Rechtsverschiebung

    Von links nach rechts

    <

    <=

    >

    >=

    Kleiner als

    Kleiner als oder gleich

    Größer als

    Größer als oder gleich

    Von links nach rechts

    ==

    !=

    Gleich

    Nicht gleich

    Von links nach rechts

    &

    Bitweise UND-Verknüpfung

    Von links nach rechts

    ^

    Bitweises exklusives ODER

    Von links nach rechts

    |

    Bitweise ODER-Verknüpfung

    Von links nach rechts

    &&

    Logische UND-Verknüpfung

    Von links nach rechts

    ||

    Logische ODER-Verknüpfung

    Von links nach rechts

    ?:

    Bedingter Operator

    Von rechts nach links

    =

    *=

    /=

    %=

    +=

    -=

    <<=

    >>=

    &=

    ^=

    |=

    Zuweisung

    Multiplikation mit Zuweisung

    Division mit Zuweisung

    Modul mit Zuweisung

    Addition mit Zuweisung

    Subtraktion mit Zuweisung

    Linksverschiebung mit Zuweisung

    Rechtsschiebung mit Zuweisung

    Bitweises UND mit Zuweisung

    Exklusives ODER mit Zuweisung

    Bitweises ODER mit Zuweisung

    Rechts nach links

    ,

    Komma

    Von links nach rechts

    () Funktionsaufruf von links nach rechts [] Verweis auf ein Array-Element
    !      Logische Negation Von rechts nach links - Vorzeichenwechselnde Operation ++ Inkrement -- Dekrement ~ Bitweise Negation (Komplement)
    & Bitweise Operation UND Von links nach rechts | Bitweise Operation ODER ^ Bitweise Operation exklusives ODER << Linksverschiebung >> Rechtsverschiebung
    * Multiplikation von links nach rechts / Division % Modul-Division
    + Addition von links nach rechts - Subtraktion
    < Kleiner als Von links nach rechts <= Kleiner als oder gleich > Größer als >= Größer als oder gleich == Gleich!= Nicht gleich
    || Logisches ODER von links nach rechts
    && Logisches UND Von links nach rechts
    = Zuweisung Von rechts nach links += Zuweisung Addition -= Zuweisung Subtraktion *= Zuweisung Multiplikation /= Zuweisung Division %= Zuweisungsmodul >>= Zuweisung Rechtsverschiebung <<= Zuweisung Linksverschiebung &= Zuweisung bitweise UND |= Zuweisung bitweise ODER ^= Zuweisung exklusives ODER
    Komma Von links nach rechts
 

WHRoeder habe ich Ihren Code gefunden (select last market order) und hervorgehobene Zeilen hinzugefügt, um den tp-Preis zu prüfen und den gleichen tp-Preis für frühere Aufträge zu setzen:

int PositionIndex;    //  <-- this variable is the index used for the loop

int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool
double Ord_TP=0;
TotalNumberOfOrders = OrdersTotal();    // <-- we store the number of Orders in the variable

for(PositionIndex = TotalNumberOfOrders - 1; PositionIndex >= 0 ; PositionIndex --)  //  <-- for loop to loop through all Orders . .   COUNT DOWN TO ZERO !
   {
   if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue;   // <-- if the OrderSelect fails advance the loop to the next PositionIndex
   
   if( OrderMagicNumber() == MagicNo       // <-- does the Order's Magic Number match our EA's magic number ? 
      && OrderSymbol() == Symbol()         // <-- does the Order's Symbol match the Symbol our EA is working on ? 
      && ( OrderType() == OP_BUY           // <-- is the Order a Buy Order ? 
      ||   OrderType() == OP_SELL ) )      // <-- or is it a Sell Order ?
   if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
      //if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), Slippage ) )               // <-- try to close the order
         //Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );  // <-- if the Order Close failed print some helpful information 
      
   } //  end of For loop

Eine extra Zeile...

if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);

Bitte führen Sie mich, wenn ich falsch liege.

(Alle Market+Pending Orders sind nur zum Kaufen, nicht zum Verkaufen, oder nur zum Verkaufen, nicht zum Kaufen, und ich möchte, dass der tp aller Market Orders jedes Mal geändert wird, wenn eine neue Market Order eröffnet wird).

DAS IST WIRKLICH SCHWIERIG FÜR MICH, ABER ICH MÖCHTE ES SCHAFFEN :(

 
Ihre Einrückung ist falsch, weil Sie keine geschweiften Klammern verwendet haben
if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
Was Ihr Code tatsächlich ist
if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); 
break;
/*NOTREACHED
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
*/
 
Die Dinge werden immer komplizierter für mich. Ich denke, ich sollte Code von Anfang an schreiben. und ich werde jeden Teil des Codes hier einfügen. vielleicht könnte ich das besser verstehen.