Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4621
Beiträge: 41681
Benutzer: 6.996
Aktive Benutzer: 183
Links: 82
Wir begrüßen unseren neuesten Benutzer: baalexeyfranesay3088
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einer Stunde
- baalexeyfr...
vor 6 Tagen
- Tbened
vor einer Woche
- coinboy
vor einer Woche
- Kat34r
vor 2 Wochen
- Goldstream

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 84
Gesamt: 85
Team: 0
Team:  
Benutzer:  traderdoc
Freunde anzeigen

Empfehlungen

Like Tree2Likes
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 07.12.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.074
MA-EA befindet sich auf einem aufstrebenden Ast
Standard Hedge EA

Hallo.

Da mein altes Thema dazu dicht ist, mach ich einfach mal nen Neues auf.

Im Anhang die neueste Version von LoShDistV3 EA. Soll nach und nach immer mehr Sell/Buy-Orders auf machen. Wenn eine der Allerersten ne einstellbare Gewinn-Distanz erreicht hat, sollen alle noch offenen Orders geschlossen und das Ganze von vorn gestartet werden.

1.
Bin ich eher noch Anfänger...

2.
...deswegen kann man bestimmt Einiges optimieren.


3.
Bin ich unschlüssig, wie ich das mit der Order-Zählerei machen soll. Ein paar Zähler müssen immer mit zählen, wie viele Orders geöffnet wurden. Mit diesen Zählern wird dann berechnet, wie viele Orders in Gegenrichtung eröffnet werden müssen, um irgendwelche Verluste mit der richtigen Orderanzahl in Gegenrichtung wieder auszugleichen.


4.
Werden die allerersten und die neuesten Orders immer wieder übers Ticket aufgerufen, um zu berechnen, wann weitere Orders geöffnet werden sollen, wie viele, bzw. ob Alle geschlossen werden können. Hatte immer wieder die Fehlermeldung, dass Ticket für irgendne ausgewählte Order nicht mehr gefunden wurde. Oder umgedreht. Jedenfalls weiß ich nicht, ob das für Abstürze oder Fehler oder sonswas für Probleme sorgt, wenn man irgendwie Tickets oder sonstwas für Infos von Orders aufruft, die inzwischen geschlossen wurden.
Code:
/*=============================================================================================================
// N O T I Z E N   U N D   I N F O S
//=============================================================================================================




 //=============================================================================================================
// P R O P E R T Y
//============================================================================================================*/
//#property strict

// #property strict sorgt anscheinend dafür,
// dass Kommentare im Konfig-Fenster im MT4 sichtbar sind.

#property copyright"LoShDistV3.mq4"
#property copyright"daniel-rudloff@web.de"
//=============================================================================================================
// B E S C H R E I B U N G
//=============================================================================================================
extern string TOY="true  = on / yes";
extern string FON="false = off / no";
//=============================================================================================================
// E I N S T E L L U N G E N
//=============================================================================================================
extern string esMN="Magic Numbers";
extern int MN_FirstSel=2;
extern int MN_FirstBuy=4;
extern int MN_NextSel=6;
extern int MN_NextBuy=8;
//-----------------------------------------------------------------------------------------------------------*/
extern string OOO1="Open Orders";
extern string OOO2="from/till Hour";
extern string OOO3="(Server Time)";
extern int OpenFromHour=5;  // Zum Testen ab 5 Uhr Orders öffnen lassen.
extern int OpenTillHour=22; // Zum Testen bis einschließlich 22 Uhr öffnen lassen.
//-----------------------------------------------------------------------------------------------------------*/
extern int Slippage=12345;
//-----------------------------------------------------------------------------------------------------------*/
extern int SL=275; // ?
//-----------------------------------------------------------------------------------------------------------*/
extern int TP=425; // ?
//-----------------------------------------------------------------------------------------------------------*/
extern string esIITCBSMS1="if IsTradeContexBusy()";
extern string esIITCBSMS2="sleep Milli Seconds";
extern int slMS=16; // Zum Testen 16 MS
//-----------------------------------------------------------------------------------------------------------*/
extern string esDOONO1="Dist to OrderOpenPrice()";
extern string esDOONO2="open next Order";
extern int Dist_ONO = 25; // ?
//-----------------------------------------------------------------------------------------------------------*/
extern string esDOCAO1="Dist to OrderOpenPrice()";
extern string esDOCAO2="close all Orders";
extern int Dist_CAO = 65; // Zum Testen 65. Weniger als ... ist wahrscheinlich nicht ausreichend?
//-----------------------------------------------------------------------------------------------------------*/
extern int OrdersNeed_Multi = 2;
//-----------------------------------------------------------------------------------------------------------*/
extern double Lots=0.01;
extern double LotsPlus=0.01; // ?
//=============================================================================================================
// G L O B A L E   D E K L A R A T I O N E N
//=============================================================================================================
bool
fiSH,fiLO,
neSH,neLO,
OCsel,OCbuy
;
//-----------------------------------------------------------------------------------------------------------*/
double
SL_Sel,SL_Buy,TP_Sel,TP_Buy,MSL,
FiSelOOP_DistONO,FiBuyOOP_DistONO,
NeSelOOP_DistONO,NeBuyOOP_DistONO,
FiSelOOP_DistCAO,FiBuyOOP_DistCAO
;
//-----------------------------------------------------------------------------------------------------------*/
int
TI_FiSel,TI_FiBuy,TI_NeSel,TI_NeBuy,
i,j,k,l,m,n,o,p,q,
FL_opSel,FL_neSel,FL_opBuy,FL_neBuy, // Temporäre Opened/Need-Werte, nur für forLoops ( ? )
Opened_Sel,Opened_Buy,
Need_Sel,Need_Buy
;
//=============================================================================================================
// I N I T
//=============================================================================================================
void OnInit(){}
//=============================================================================================================
// D E I N I T ?
//=============================================================================================================
void OnDeinit(const int reason){}// ?
//=============================================================================================================
// E A   F U N K T I O N E N   S T A R T
//=============================================================================================================int 
void OnTick(){
//=============================================================================================================
// S T O P   L O S S
//=============================================================================================================
//SL auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(SL<1){
  SL_Sel=0.0;
  SL_Buy=0.0;}
else{
  SL_Sel=NormalizeDouble(Bid+SL*_Point,_Digits);
  SL_Buy=NormalizeDouble(Ask-SL*_Point,_Digits);}
//SL genauso groß wie Minstoplevels machen, wenn er kleiner ist:
MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(SL_Sel<MSL)SL_Sel=MSL;
if(SL_Buy<MSL)SL_Buy=MSL;
//=============================================================================================================
// T A K E   P R O F I T
//=============================================================================================================
//TP auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(TP<1){
  TP_Sel=0.0;
  TP_Buy=0.0;}
else{
  TP_Sel=NormalizeDouble(Bid-TP*_Point,_Digits);
  TP_Buy=NormalizeDouble(Ask+TP*_Point,_Digits);}
//=============================================================================================================
// C H E C K   H O U R
//=============================================================================================================
// Prüfen, ob zur Zeit Orders geöffnet werden dürfen.
if(

    (Hour()>=OpenFromHour&&Hour()<=OpenTillHour)||

    (Hour()>OpenTillHour&&Hour()<OpenFromHour && Opened_Sel>=1 && Opened_Buy>=1 )
      
  ){

//=============================================================================================================
// 1 . O R D E R   S E A R C H   
//=============================================================================================================// Prüfen, überhaupt Orders offen sind.
fiSH=false;
neSH=false;
fiLO=false;
neLO=false;
for(i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FirstSel)fiSH=true;
if(OrderMagicNumber()==MN_NextSel )neSH=true;
if(OrderMagicNumber()==MN_FirstBuy)fiLO=true;
if(OrderMagicNumber()==MN_NextBuy )neLO=true;}}}
//=============================================================================================================
// O P E N   F I R S T   S E L L / O P E N   F I R S T   B U Y
//=============================================================================================================// Prüfen, überhaupt Orders offen sind.
// Wenn gar keine Orders offen sind...
if(fiSH==false&&neSH==false&&fiLO==false&&neLO==false){
//-----------------------------------------------------------------------------------------------------------*/
//...Zähler auf 0 setzen.  
  Opened_Sel=0;
  Opened_Buy=0;
  Need_Sel  =0;
  Need_Buy  =0;
//-----------------------------------------------------------------------------------------------------------*/

// ...FirstSell öffnen:
  if(IsTradeAllowed()==true){
    TI_FiSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_FirstSel,clrBlue);
    if(IsTradeContextBusy()==true)Sleep(slMS);} // ?

// ...FirstBuy öffnen:
  if(IsTradeAllowed()==true){
    TI_FiBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_FirstBuy,clrBlue);
    if(IsTradeContextBusy()==true)Sleep(slMS);} // ?

}
//=============================================================================================================
// 2 . O R D E R   S E A R C H 
//=============================================================================================================
// Prüfen, ob 1.Sell und 1.Buy geöffnet wurden,
// und ob next Sell und next Buy schon geöffnet wurden.
for(j=OrdersTotal()-1;j>=0;j--){
if(OrderSelect(j,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FirstSel)fiSH=true;
if(OrderMagicNumber()==MN_NextSel )neSH=true;
if(OrderMagicNumber()==MN_FirstBuy)fiLO=true;
if(OrderMagicNumber()==MN_NextBuy )neLO=true;}}}
//=============================================================================================================
// O P E N   F I R S T   N E X T   O R D E R S
//=============================================================================================================
// Wenn nur FirstSell und FirstBuy offen sind,
// bei entsprechenden Bedingungen
// next Sel / next Buy öffnen.
if(fiSH==true&&fiLO==true&&neSH==false&&neLO==false){
//-----------------------------------------------------------------------------------------------------------*/

// Wenn FirstSell Bedingungen erfüllt, next Sell öffnen.
if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){
  if(OrderSymbol()==Symbol()){ // ?
      
    FiSelOOP_DistONO=NormalizeDouble( OrderOpenPrice() - Dist_ONO*_Point,_Digits);

    if(Bid <= FiSelOOP_DistONO){

      for( k=OrdersNeed_Multi ; k>0 ; k--){
        if(IsTradeAllowed()==true)TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NextSel,clrBlue);
        if(IsTradeContextBusy()==true)Sleep(slMS);

        Opened_Sel++;

        Need_Sel = Opened_Sel * OrdersNeed_Multi;

        Need_Buy = Need_Sel * OrdersNeed_Multi;} // ?

} } }

//-----------------------------------------------------------------------------------------------------------*/

// Wenn 1.Buy Bedingungen erfüllt,
// next Buy öffnen.
if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){
  if(OrderSymbol()==Symbol()){
       
    FiBuyOOP_DistONO=NormalizeDouble( OrderOpenPrice() + Dist_ONO*_Point,_Digits);

    if(Ask>=FiBuyOOP_DistONO){

      for( l=OrdersNeed_Multi ; l>0 ; l--){
        if(IsTradeAllowed()==true)TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots,Bid,Slippage,SL_Buy,TP_Buy,NULL,MN_NextBuy,clrBlue);
        if(IsTradeContextBusy()==true)Sleep(slMS);
          
        Opened_Buy++;
      
        Need_Buy = Opened_Buy * OrdersNeed_Multi;
          
        Need_Sel = Need_Buy * OrdersNeed_Multi;}

} } }
//-----------------------------------------------------------------------------------------------------------*/
}
//=============================================================================================================
// 3 . O R D E R   S E A R C H 
//=============================================================================================================
// 1.Sell und 1.Buy müssen offen sein.
// nextSell und/oder nextBuy müssen offen sein.
for(m=OrdersTotal()-1;m>=0;m--){
  if(OrderSelect(m,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==MN_FirstSel)fiSH=true;
      if(OrderMagicNumber()==MN_NextSel )neSH=true;
      if(OrderMagicNumber()==MN_FirstBuy)fiLO=true;
      if(OrderMagicNumber()==MN_NextBuy )neLO=true;}}}
//=============================================================================================================
// C H E C K   F I R S T   O R D E R S   A N D   N E X T   O R D E R S
//=============================================================================================================
// Wenn FirstSell und FirstBuy offen sind...
if(fiSH==true&&fiLO==true){

// ...und nextSell oder nextBuy offen sind,
  if(neSH==true||neLO==true){

// Weitere nextOrders öffnen,
// wenn Bedingungen erfüllt sind.
//=============================================================================================================
// C H E C K   F I R S T   A N D   N E X T   S E L L   O R D E R S
//=============================================================================================================// Letzten next Sell über Ticket auswählen.     

// Letzten NextSell auswählen.
if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){
  if(OrderSymbol()==Symbol()){

//  Prüfen, ob letzter NextSell OpenNextOrder-Dist erreicht hat.
    NeSelOOP_DistONO=NormalizeDouble( OrderOpenPrice() - Dist_ONO*_Point,_Digits );
    if(Bid <= NeSelOOP_DistONO){

//    Wenn ja, FirstSell über Ticket auswählen.
      if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){
        if(OrderSymbol()==Symbol()){

//=============================================================================================================
// O P E N   N E W   S E L L   O R D E R S   B Y   D I S T
//=============================================================================================================

//        Wenn FirstSell Gewinn-Distanz nicht erreicht hat, weitere Sell-Orders öffnen.
          if( Ask > FiSelOOP_DistCAO ){

            FL_opSel=Opened_Sel; // ?
            FL_neSel=Need_Sel;  // ?
            for( n=FL_neSel ; n>0 ; n--){
              if(IsTradeAllowed()==true)TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NextSel,clrYellow);
              if(IsTradeContextBusy()==true)Sleep(slMS);

              Opened_Sel++;

              Need_Sel = Opened_Sel * OrdersNeed_Multi;

              Need_Buy = Need_Sel * OrdersNeed_Multi;} }

//=============================================================================================================
// C L O S E   A L L   O R D E R S   B Y   S E L L   D I S T
//=============================================================================================================

//        Wenn FirstSell Gewinn-Dist doch erreicht hat... 
          if( Ask <= FiSelOOP_DistCAO ){
          
//          ...Lots erhöhen...
            Lots = OrderLots() + LotsPlus; // ?

//          ...und alle Orders schließen.
            for(p=OrdersTotal()-1;p>=0;p--){
              if(OrderSelect(p,SELECT_BY_POS)){
                if(OrderSymbol()==Symbol()){

                  if(OrderMagicNumber()==MN_NextBuy){
                    if(IsTradeAllowed()==true)OCbuy=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}

                  if(OrderMagicNumber()==MN_FirstBuy){
                    if(IsTradeAllowed()==true)OCbuy=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}

                  if(OrderMagicNumber()==MN_NextSel){
                    if(IsTradeAllowed()==true)OCsel=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}

                  if(OrderMagicNumber()==MN_FirstSel){
                    if(IsTradeAllowed()==true)OCsel=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}

} } } }
//-----------------------------------------------------------------------------------------------------------*/
} } } } }
//=============================================================================================================
// C H E C K   F I R S T   A N D   N E X T   B U Y   O R D E R S
//=============================================================================================================

// Letzten NextBuy über Ticket auswählen.
if(OrderSelect(TI_NeBuy,SELECT_BY_TICKET)){
  if(OrderSymbol()==Symbol()){

//  Prüfen, ob NextBuy OpenNextOrder-Dist erreicht hat.
    NeBuyOOP_DistONO=NormalizeDouble(OrderOpenPrice() + Dist_ONO*_Point,_Digits);
    if(Ask >= NeBuyOOP_DistONO){

//    Wenn ja, FirstBuy über Ticket auswählen.
      if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){
        if(OrderSymbol()==Symbol()){

//        Prüfen, ob 1.Buy Gewinn-Distanz erreicht hat.   
          FiBuyOOP_DistCAO=NormalizeDouble( OrderOpenPrice() + Dist_CAO*_Point,_Digits);
//=============================================================================================================
// O P E N   N E W   B U Y   O R D E R S   B Y   D I S T
//=============================================================================================================

// Wenn 1.Buy Gewinn-Distanz nicht erreicht hat weitere Buy-Orders öffnen.       
            if(Bid < FiBuyOOP_DistCAO){

              FL_opBuy=Opened_Buy; // ?
              FL_neBuy=Need_Buy;  // ?
              for( o=FL_neBuy ; o>0 ; o--){
                if(IsTradeAllowed()==true)TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots,Bid,Slippage,SL_Buy,TP_Buy,NULL,MN_NextBuy,clrYellow);
                if(IsTradeContextBusy()==true)Sleep(slMS);
          
                Opened_Buy++;
      
                Need_Buy = Opened_Buy * OrdersNeed_Multi;
          
                Need_Sel = Need_Buy * OrdersNeed_Multi;} }

//=============================================================================================================
// C L O S E   A L L   O R D E R S   B Y   B U Y   D I S T
//=============================================================================================================

//        Wenn FirstBuy Gewinn-Dist doch erreicht hat...
          if( Bid >= FiBuyOOP_DistCAO ){
          
//          ...Lots erhöhen...
            Lots = OrderLots() + LotsPlus; // ?

//          ...und alle Orders schließen.
            for(q=OrdersTotal()-1;q>=0;q--){
              if(OrderSelect(q,SELECT_BY_POS)){
                if(OrderSymbol()==Symbol()){

                  if(OrderMagicNumber()==MN_NextSel){
                    if(IsTradeAllowed()==true)OCsel=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}
    
                  if(OrderMagicNumber()==MN_FirstSel){
                    if(IsTradeAllowed()==true)OCsel=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}

                  if(OrderMagicNumber()==MN_NextBuy){
                    if(IsTradeAllowed()==true)OCbuy=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}

                  if(OrderMagicNumber()==MN_FirstBuy){
                    if(IsTradeAllowed()==true)OCbuy=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}

} } } }
//-----------------------------------------------------------------------------------------------------------*/
} } } } }
//-----------------------------------------------------------------------------------------------------------*/
} }
//-----------------------------------------------------------------------------------------------------------*/
} // Öffnende Klammer nach Hour Check
//=============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
}//(void OnTick)
Angehängte Dateien
Dateityp: mq4 LoShDistV3.mq4 (39,1 KB, 0x aufgerufen)
Mit Zitat antworten
  #2 (permalink)  
Alt 08.12.20
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 94
daybyter befindet sich auf einem aufstrebenden Ast
Standard

Interessantes Konzept.

Ich finde Deinen Code an einigen Stellen schwer zu lesen. Starte doch mal damit den Styler aufzurufen. Packe jede Variable in eine Zeile und schreibe einen Kommentar dahinter, für was die da ist.
Mit Zitat antworten
  #3 (permalink)  
Alt 09.12.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.074
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Ist nen relativ komplexer EA.

Um ihn etwas übersichtlicher und einfacher zu machen:

Am Ende sollen ja alle offenen Orders geschlossen werden.

-1. Sell
-1. Buy

-und alle danach geöffneten Sell- und Buy-Orders. Statt für jede davon ne extra OrderClose-Funktion aufzurufen, könnte man vielleicht Alle mit Einer schließen:
Code:
            for(q=OrdersTotal()-1;q>=0;q--){
              if(OrderSelect(q,SELECT_BY_POS)){
                if(OrderSymbol()==Symbol()){


if ( OrderMagicNumber() == 1 || 2 || was-auch-immer ){

OC=OrderClose(NULL,NULL,NULL,Slippage,clrRed );
Eigentlich sind die Werte ja egal, hauptsache, alle Orders werden geschlossen.

Zur Zeit siehts so aus:
Code:
//        Wenn FirstBuy Gewinn-Dist doch erreicht hat...
          if( Bid >= FiBuyOOP_DistCAO ){
          
//          ...Lots erhöhen...
            Lots = OrderLots() + LotsPlus; // ?

//          ...und alle Orders schließen.
            for(q=OrdersTotal()-1;q>=0;q--){
              if(OrderSelect(q,SELECT_BY_POS)){
                if(OrderSymbol()==Symbol()){

                  if(OrderMagicNumber()==MN_NextSel){
                    if(IsTradeAllowed()==true)OCsel=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}
    
                  if(OrderMagicNumber()==MN_FirstSel){
                    if(IsTradeAllowed()==true)OCsel=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}

                  if(OrderMagicNumber()==MN_NextBuy){
                    if(IsTradeAllowed()==true)OCbuy=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}

                  if(OrderMagicNumber()==MN_FirstBuy){
                    if(IsTradeAllowed()==true)OCbuy=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                    if(IsTradeContextBusy()==true)Sleep(slMS);}

} } } }
Angehängte Dateien
Dateityp: mq4 LoShDistV3.mq4 (39,1 KB, 0x aufgerufen)
Mit Zitat antworten
  #4 (permalink)  
Alt 09.12.20
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 94
daybyter befindet sich auf einem aufstrebenden Ast
Standard

Ich vermute mal, es ist eher wurscht, wie Du die Orders schliesst.

Es gibt eine Reihe von Fällen, wo es wichtig ist, wie Du die Orders schliesst. Z.B. wenn es zeitkritisch ist, und Du Deinen Profit sichern musst. Oder es gibt Broker, wo Du 2 Orders miteinander verrechnen kannst. Du schliesst also eine Long und Short Order mit einem Befehl und reduzierst so Deine Gebühren (such mal nach OrderCloseBy).

Scheint mir aktuell aber so, als ob das hier nicht zutrifft?

Ich hab bei meinem Hedging EA die Order in einer Klasse gemanaged, so halt Objekte gespeichert hat, die jeweils eine Order repräsentieren. Das grösste Problem dabei ist eigentlich mitzubekommen, wenn eine Order ausgestoppt wurde. Musst Du halt bei jedem Tick checken.
Mit Zitat antworten
  #5 (permalink)  
Alt 09.12.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.074
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

https://docs.mql4.com/trading/ordercloseby

Scheint bloß mit Ticket zu funktionieren. Und dürfte auch nix bringen, man muss ja so oder so den Spread bezahlen.

Das größte Prob ist wohl die Verbindung. Wenn man 10 oder mehr Symbol() offen hat, und in jedem laufen 10 oder noch mehr Orders gleichzeitig, die immer wieder raus gesucht und berechnet und verwaltet werden müssen, dann ist meine größte Sorge, dass der MT4 und/oder die Verbindung irgendwann nicht mehr hinterher kommen.

Wenn das Gerät funktioniert, dann vermutlich nur mit nem Spread von allerhöchstens 20 und ner Hand voll WP.
Code:
//=============================================================================================================
// P R O P E R T Y
//============================================================================================================*/
//#property strict

// #property strict sorgt anscheinend dafür,
// dass Kommentare im Konfig-Fenster im MT4 sichtbar sind.

#property copyright"LoShDistV3.mq4"
#property copyright"daniel-rudloff@web.de"
//=============================================================================================================
// B E S C H R E I B U N G
//=============================================================================================================
extern string TOY="true  = on / yes";
extern string FON="false = off / no";
//=============================================================================================================
// E I N S T E L L U N G E N
//=============================================================================================================
extern string esMN="Magic Numbers";
extern int MN_FiSel=12;
extern int MN_FiBuy=34;
extern int MN_NeSel=56;
extern int MN_NeBuy=78;
//-----------------------------------------------------------------------------------------------------------*/
extern string OOO1="Open Orders";
extern string OOO2="from/till Hour";
extern string OOO3="(Server Time)";
extern int FromH=5;  // Zum Testen ab 5 Uhr Orders öffnen lassen.
extern int TillH=22; // Zum Testen bis einschließlich 22 Uhr öffnen lassen.
//-----------------------------------------------------------------------------------------------------------*/
extern int Slippage=12345;
//-----------------------------------------------------------------------------------------------------------*/
extern int SL=275; // ?
//-----------------------------------------------------------------------------------------------------------*/
extern int TP=425; // ?
//-----------------------------------------------------------------------------------------------------------*/
extern string esIITCBSMS1="if IsTradeContexBusy()";
extern string esIITCBSMS2="sleep Milli Seconds";
extern int slMS=16; // Zum Testen 16 MS
//-----------------------------------------------------------------------------------------------------------*/
extern string esDOONO1="Dist to OrderOpenPrice()";
extern string esDOONO2="open next Order";
extern int Dist_ONO = 25; // ?
//-----------------------------------------------------------------------------------------------------------*/
extern string esDOCAO1="Dist to OrderOpenPrice()";
extern string esDOCAO2="close all Orders";
extern int Dist_CAO = 65; // Zum Testen 65. Weniger als ... ist wahrscheinlich nicht ausreichend?
//-----------------------------------------------------------------------------------------------------------*/
extern int OrdersNeed_Multi = 2;
//-----------------------------------------------------------------------------------------------------------*/
extern double Lots=0.01;
extern double LotsPlus=0.01; // ?
//=============================================================================================================
// G L O B A L E   D E K L A R A T I O N E N
//=============================================================================================================
bool
fiSH,fiLO,
neSH,neLO,
OCsel,OCbuy
;
//-----------------------------------------------------------------------------------------------------------*/
double
SL_Sel,SL_Buy,TP_Sel,TP_Buy,MSL,
FiSelOOP_DistONO,FiBuyOOP_DistONO,
NeSelOOP_DistONO,NeBuyOOP_DistONO,
FiSelOOP_DistCAO,FiBuyOOP_DistCAO
;
//-----------------------------------------------------------------------------------------------------------*/
int
TI_FiSel,TI_FiBuy,TI_NeSel,TI_NeBuy,
i,j,k,l,m,n,o,p,q,
FL_opSel,FL_neSel,FL_opBuy,FL_neBuy, // Temporäre Opened/Need-Werte, nur für forLoops ( ? )
Opened_Sel,Opened_Buy,
Need_Sel,Need_Buy
;
//=============================================================================================================
// I N I T
//=============================================================================================================
void OnInit(){}
//=============================================================================================================
// D E I N I T ?
//=============================================================================================================
void OnDeinit(const int reason){}// ?
//=============================================================================================================
// E A   F U N K T I O N E N   S T A R T
//=============================================================================================================int 
void OnTick(){
//=============================================================================================================
// S T O P   L O S S
//=============================================================================================================
//SL auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(SL<1){
  SL_Sel=0.0;
  SL_Buy=0.0;}
if(SL>=1){
  SL_Sel=NormalizeDouble(Bid+SL*_Point,_Digits);
  SL_Buy=NormalizeDouble(Ask-SL*_Point,_Digits);}
//SL genauso groß wie Minstoplevels machen, wenn er kleiner ist:
MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(SL_Sel<MSL)SL_Sel=MSL;
if(SL_Buy<MSL)SL_Buy=MSL;
//=============================================================================================================
// T A K E   P R O F I T
//=============================================================================================================
//TP auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(TP<1){
  TP_Sel=0.0;
  TP_Buy=0.0;}
if(TP>=1){
  TP_Sel=NormalizeDouble(Bid-TP*_Point,_Digits);
  TP_Buy=NormalizeDouble(Ask+TP*_Point,_Digits);}
//=============================================================================================================
// C H E C K   H O U R
//=============================================================================================================
// Prüfen, ob zur Zeit Orders geöffnet werden dürfen.
if(

    (Hour()>=FromH&&Hour()<=TillH)||

    (Hour()> TillH&&Hour()<FromH && Opened_Sel>=1 && Opened_Buy>=1 )
      
  ){

//=============================================================================================================
// 1 . O R D E R   S E A R C H   
//=============================================================================================================// Prüfen, überhaupt Orders offen sind.
fiSH=false;
neSH=false;
fiLO=false;
neLO=false;
for(i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FiSel)fiSH=true;
if(OrderMagicNumber()==MN_NeSel )neSH=true;
if(OrderMagicNumber()==MN_FiBuy)fiLO=true;
if(OrderMagicNumber()==MN_NeBuy )neLO=true;}}}
//=============================================================================================================
// O P E N   F I R S T   S E L L / O P E N   F I R S T   B U Y
//=============================================================================================================// Prüfen, überhaupt Orders offen sind.
// Wenn gar keine Orders offen sind...
if(fiSH==false&&neSH==false&&fiLO==false&&neLO==false){
//-----------------------------------------------------------------------------------------------------------*/
//...Zähler auf 0 setzen.  
  Opened_Sel=0;
  Opened_Buy=0;
  Need_Sel  =0;
  Need_Buy  =0;
//-----------------------------------------------------------------------------------------------------------*/

// ...FirstSell öffnen:
  if(IsTradeAllowed()==true){
    TI_FiSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_FiSel,clrBlue);
    if(IsTradeContextBusy()==true)Sleep(slMS);} // ?

// ...FirstBuy öffnen:
  if(IsTradeAllowed()==true){
    TI_FiBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_FiBuy,clrBlue);
    if(IsTradeContextBusy()==true)Sleep(slMS);} // ?

}
//=============================================================================================================
// 2 . O R D E R   S E A R C H 
//=============================================================================================================
// Prüfen, ob 1.Sell und 1.Buy geöffnet wurden,
// und ob next Sell und next Buy schon geöffnet wurden.
for(j=OrdersTotal()-1;j>=0;j--){
if(OrderSelect(j,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FiSel)fiSH=true;
if(OrderMagicNumber()==MN_NeSel)neSH=true;
if(OrderMagicNumber()==MN_FiBuy)fiLO=true;
if(OrderMagicNumber()==MN_NeBuy)neLO=true;}}}
//=============================================================================================================
// O P E N   F I R S T   N E X T   O R D E R S
//=============================================================================================================
// Wenn nur FirstSell und FirstBuy offen sind,
// bei entsprechenden Bedingungen
// next Sel / next Buy öffnen.
if(fiSH==true&&fiLO==true&&neSH==false&&neLO==false){
//-----------------------------------------------------------------------------------------------------------*/

// Wenn FirstSell Bedingungen erfüllt, next Sell öffnen.
if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){
if(OrderSymbol()==Symbol()){ // ?
      
  FiSelOOP_DistONO=NormalizeDouble( OrderOpenPrice() - Dist_ONO*_Point,_Digits);

  if(Bid <= FiSelOOP_DistONO){

    for( k=OrdersNeed_Multi ; k>0 ; k--){
      if(IsTradeAllowed()==true)TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,clrBlue);
      if(IsTradeContextBusy()==true)Sleep(slMS);

      Opened_Sel++;

      Need_Sel = Opened_Sel * OrdersNeed_Multi;

      Need_Buy = Need_Sel * OrdersNeed_Multi;} // ?

} } }

//-----------------------------------------------------------------------------------------------------------*/

// Wenn 1.Buy Bedingungen erfüllt,
// next Buy öffnen.
if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){
if(OrderSymbol()==Symbol()){
       
  FiBuyOOP_DistONO=NormalizeDouble( OrderOpenPrice() + Dist_ONO*_Point,_Digits);

  if(Ask>=FiBuyOOP_DistONO){

    for( l=OrdersNeed_Multi ; l>0 ; l--){
      if(IsTradeAllowed()==true)TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots,Bid,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,clrBlue);
      if(IsTradeContextBusy()==true)Sleep(slMS);
          
        Opened_Buy++;
      
        Need_Buy = Opened_Buy * OrdersNeed_Multi;
          
        Need_Sel = Need_Buy * OrdersNeed_Multi;}

} } }
//-----------------------------------------------------------------------------------------------------------*/
}
//=============================================================================================================
// 3 . O R D E R   S E A R C H 
//=============================================================================================================
// 1.Sell und 1.Buy müssen offen sein.
// nextSell und/oder nextBuy müssen offen sein.
for(m=OrdersTotal()-1;m>=0;m--){
if(OrderSelect(m,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_FiSel)fiSH=true;
if(OrderMagicNumber()==MN_NeSel)neSH=true;
if(OrderMagicNumber()==MN_FiBuy)fiLO=true;
if(OrderMagicNumber()==MN_NeBuy)neLO=true;}}}
//=============================================================================================================
// C H E C K   F I R S T   O R D E R S   A N D   N E X T   O R D E R S
//=============================================================================================================
// Wenn FirstSell und FirstBuy offen sind...
if(fiSH==true&&fiLO==true){

// ...und nextSell oder nextBuy offen sind,
  if(neSH==true||neLO==true){

// Weitere nextOrders öffnen,
// wenn Bedingungen erfüllt sind.
//=============================================================================================================
// C H E C K   F I R S T   A N D   N E X T   S E L L   O R D E R S
//=============================================================================================================// Letzten next Sell über Ticket auswählen.     

// Letzten NextSell auswählen.
if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){if(OrderSymbol()==Symbol()){


//Prüfen, ob letzter NextSell OpenNextOrder-Dist erreicht hat.
  NeSelOOP_DistONO=NormalizeDouble( OrderOpenPrice() - Dist_ONO*_Point,_Digits );
  if(Bid <= NeSelOOP_DistONO){

//    Wenn ja, FirstSell über Ticket auswählen.
  if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){if(OrderSymbol()==Symbol()){
    
//=============================================================================================================
// O P E N   N E W   S E L L   O R D E R S   B Y   D I S T
//=============================================================================================================

//        Wenn FirstSell Gewinn-Distanz nicht erreicht hat, weitere Sell-Orders öffnen.
          if( Ask > FiSelOOP_DistCAO ){

            FL_opSel=Opened_Sel; // ?
            FL_neSel=Need_Sel;  // ?
            for( n=FL_neSel ; n>0 ; n--){
              if(IsTradeAllowed()==true)TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,clrYellow);
              if(IsTradeContextBusy()==true)Sleep(slMS);

              Opened_Sel++;

              Need_Sel = Opened_Sel * OrdersNeed_Multi;

              Need_Buy = Need_Sel * OrdersNeed_Multi;} }

//=============================================================================================================
// C L O S E   A L L   O R D E R S   B Y   S E L L   D I S T
//=============================================================================================================

//        Wenn FirstSell Gewinn-Dist doch erreicht hat... 
          if( Ask <= FiSelOOP_DistCAO ){
          
//          ...Lots erhöhen...
            Lots = OrderLots() + LotsPlus; // ?

//          ...und alle Orders schließen.
            for(p=OrdersTotal()-1;p>=0;p--){
            if(OrderSelect(p,SELECT_BY_POS)){
            if(OrderSymbol()==Symbol()){

              if(OrderMagicNumber()==MN_NeBuy||OrderMagicNumber()==MN_FiBuy||OrderMagicNumber()==MN_NeSel||OrderMagicNumber()==MN_FiSel){
                if(IsTradeAllowed()==true)OCbuy=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                if(IsTradeContextBusy()==true)Sleep(slMS);}

} } } }
//-----------------------------------------------------------------------------------------------------------*/
} } } } }
//=============================================================================================================
// C H E C K   F I R S T   A N D   N E X T   B U Y   O R D E R S
//=============================================================================================================

// Letzten NextBuy über Ticket auswählen.
if(OrderSelect(TI_NeBuy,SELECT_BY_TICKET)){
  if(OrderSymbol()==Symbol()){

//  Prüfen, ob NextBuy OpenNextOrder-Dist erreicht hat.
    NeBuyOOP_DistONO=NormalizeDouble(OrderOpenPrice() + Dist_ONO*_Point,_Digits);
    if(Ask >= NeBuyOOP_DistONO){

//    Wenn ja, FirstBuy über Ticket auswählen.
      if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){
        if(OrderSymbol()==Symbol()){

//        Prüfen, ob 1.Buy Gewinn-Distanz erreicht hat.   
          FiBuyOOP_DistCAO=NormalizeDouble( OrderOpenPrice() + Dist_CAO*_Point,_Digits);
//=============================================================================================================
// O P E N   N E W   B U Y   O R D E R S   B Y   D I S T
//=============================================================================================================

// Wenn 1.Buy Gewinn-Distanz nicht erreicht hat weitere Buy-Orders öffnen.       
            if(Bid < FiBuyOOP_DistCAO){

              FL_opBuy=Opened_Buy; // ?
              FL_neBuy=Need_Buy;  // ?
              for( o=FL_neBuy ; o>0 ; o--){
                if(IsTradeAllowed()==true)TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots,Bid,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,clrYellow);
                if(IsTradeContextBusy()==true)Sleep(slMS);
          
                Opened_Buy++;
      
                Need_Buy = Opened_Buy * OrdersNeed_Multi;
          
                Need_Sel = Need_Buy * OrdersNeed_Multi;} }

//=============================================================================================================
// C L O S E   A L L   O R D E R S   B Y   B U Y   D I S T
//=============================================================================================================

//        Wenn FirstBuy Gewinn-Dist doch erreicht hat...
          if( Bid >= FiBuyOOP_DistCAO ){
          
//          ...Lots erhöhen...
            Lots = OrderLots() + LotsPlus; // ?

//          ...und alle Orders schließen.
            for(q=OrdersTotal()-1;q>=0;q--){
            if(OrderSelect(q,SELECT_BY_POS)){
            if(OrderSymbol()==Symbol()){

              if(OrderMagicNumber()==MN_NeSel||OrderMagicNumber()==MN_FiSel||OrderMagicNumber()==MN_NeBuy||OrderMagicNumber()==MN_FiBuy){
                if(IsTradeAllowed()==true)OCsel=OrderClose(NULL,OrderLots(),NULL,Slippage,clrRed);
                if(IsTradeContextBusy()==true)Sleep(slMS);}

} } } }
//-----------------------------------------------------------------------------------------------------------*/
} } } } }
//-----------------------------------------------------------------------------------------------------------*/
} }
//-----------------------------------------------------------------------------------------------------------*/
} // Öffnende Klammer nach Hour Check
//=============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
}//(void OnTick)
Angehängte Dateien
Dateityp: mq4 LoShDistV3.mq4 (36,4 KB, 0x aufgerufen)
Mit Zitat antworten
  #6 (permalink)  
Alt 10.12.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.074
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hallo.

Im Anhang die neueste Version. Funktioniert allgemein wie sie soll, allerdings wurde heute im Demo-Konto keine einzige Order geschlossen. Vermutlich weil ich die Berechnungen dafür nicht da hatte, wo sie hin gehörn. Trotzdem hat der EA heute ein paar Pipen Gewinn machen können. Sind aber nicht der Rede wert.

Aber so richtig gefällt mir diese OrderClose-Geschichte nicht. Aber müsste doch eigentlich funktionieren...
Code:
//      Wenn FirstSell Gewinn-Dist doch erreicht hat...
        if( Ask < FiSelOOP_DCAO ){
          
//        ...Lots erhöhen...
          Lots = OrderLots() + LotsPlus; // ?

//        ...und alle Orders schließen.
          for(p=OrdersTotal()-1;p>=0;p--){
          if(OrderSelect(p,SELECT_BY_POS)){
          if(OrderSymbol()==Symbol()){

            if(OrderMagicNumber()==MN_FiBuy||OrderMagicNumber()==MN_NeBuy||OrderMagicNumber()==MN_FiSel||OrderMagicNumber()==MN_NeSel){
              if(IsTradeAllowed()==true)OCbuy=OrderClose(NULL,NULL,NULL,Slippage,clrRed);
              if(IsTradeContextBusy()==true)Sleep(slMS);}

} } } }
Code:
//      Wenn FirstBuy Gewinn-Dist doch erreicht hat...
        if( Bid > FiBuyOOP_DCAO ){
          
//        ...Lots erhöhen...
          Lots = OrderLots() + LotsPlus; // ?

//        ...und alle Orders schließen.
          for(q=OrdersTotal()-1;q>=0;q--){
          if(OrderSelect(q,SELECT_BY_POS)){
          if(OrderSymbol()==Symbol()){

            if(OrderMagicNumber()==MN_FiSel||OrderMagicNumber()==MN_NeSel||OrderMagicNumber()==MN_FiBuy||OrderMagicNumber()==MN_NeBuy){
              if(IsTradeAllowed()==true)OCsel=OrderClose(NULL,NULL,NULL,Slippage,clrRed);
              if(IsTradeContextBusy()==true)Sleep(slMS);}

} } } }
Angehängte Dateien
Dateityp: mq4 LoShDistV3.mq4 (36,1 KB, 0x aufgerufen)
Mit Zitat antworten
  #7 (permalink)  
Alt 10.12.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.486
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Hallo.

Im Anhang die neueste Version. Funktioniert allgemein wie sie soll, allerdings wurde heute im Demo-Konto keine einzige Order geschlossen. Vermutlich weil ich die Berechnungen dafür nicht da hatte, wo sie hin gehörn. Trotzdem hat der EA heute ein paar Pipen Gewinn machen können. Sind aber nicht der Rede wert.
Aber so richtig gefällt mir diese OrderClose-Geschichte nicht. Aber müsste doch eigentlich funktionieren...
[/CODE]
Also ich fasse mal zusammen.
Der EA funktioniert erst einmal 100%ig!!
Der EA schließt aber keine Order.
Der EA hat falsche Berechnungen bekommen.
Der EA generiert ein paar Pipen, die nicht der Rede wert sind.

Dem Programmierer gefällt das Order-Close nicht.
Sein Glaube lautet: ".. müsste doch eigentlich funktionieren".

@MA-EA, aber das Wichtigste ist doch, dass der EA so funktioniert wie er soll, also 100%ig!!

Einfach nur toll.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #8 (permalink)  
Alt 10.12.20
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 94
daybyter befindet sich auf einem aufstrebenden Ast
Standard

Mach Dir mal ein Print in diese ganzen if Bedingungen beim Order Schliessen.

Beim Order-Schliessen ist normalerweise nicht der EA oder Metatrader das Problem. Du hast da Broker, die beim Schliessen schonmal 2s verzögern. Such mal nach *'last look forex', oder so.
Mit Zitat antworten
  #9 (permalink)  
Alt 11.12.20
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 175
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

@daybyter: Nein, das der EA die Orders nicht schließt liegt bei diesem EA ganz ganz ganz bestimmt nicht am Broker!
Außerdem meint MA-EA ja auch das die Orders überhaupt nicht geschlossen werden. Was du da ansprichst ist der Faktor aus der die Slippage entsteht, also das du zu einem anderen Preis ausgeführt wirst, als du es in dem Moment des Sendens von OrderSend/Close gehabt hättest.
Mit Zitat antworten
  #10 (permalink)  
Alt 11.12.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.074
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

War mein Fehler. Es lag (höchstwahrscheinlich) daran, dass ich bei OrderClose() bei einigen Stellen nur NULL eingetragen hatte. Müsste doch eigentlich egal sein, ob ich z.B. bei Ticket "double 1=23"; oder "string w = "woher soll ich das Ticket wissen?";" schreibe. Aber anscheinend ist der MT4 nur zufrieden, wenn er die entsprechenden Bezeichnungen vorfindet.
Code:
if(OrderMagicNumber()==MN_FiSel||OrderMagicNumber()==MN_NeSel||OrderMagicNumber()==MN_FiBuy||OrderMagicNumber()==MN_NeBuy){
              if(IsTradeAllowed()==true)OCsel=OrderClose(OrderTicket(),OrderLots(),NULL,Slippage,clrRed);
              if(IsTradeContextBusy()==true)Sleep(slMS);}
Code:
if(OrderMagicNumber()==MN_FiBuy||OrderMagicNumber()==MN_NeBuy||OrderMagicNumber()==MN_FiSel||OrderMagicNumber()==MN_NeSel){
              if(IsTradeAllowed()==true)OCbuy=OrderClose(OrderTicket(),OrderLots(),NULL,Slippage,clrRed);
              if(IsTradeContextBusy()==true)Sleep(slMS);}
Angehängte Dateien
Dateityp: mq4 LoShDistV3.mq4 (36,2 KB, 1x aufgerufen)
Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2021 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------