Verdammter Fehler 130 zur Hölle - Seite 3

 
delcor wrote >>

Vangrosh

danke für den Beitrag

können Sie mir helfen, zu verstehen

ist dies richtig

Ich mache einen EA mit Auto-Trail

if(OrderType()==OP_SELL && OrderSymbol()==Symbol())

{
wenn (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // einen TP und SL setzen
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // TP setzen
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // true prüfen
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // wenn wahr, Order modifizieren
Print("Fehler_Ändern - ",GetLastError());
else str=StringConcatenate("\n Meine Ticketnummer ist ", OrderTicket(), " und meine Stop-Loss-Einstellung ist ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // neuer Code
}
}
}

Hier ist, was ich in einem anderen Beitrag geschrieben habe, um den unterschiedlichen Ansatz zu erklären.

>>Hier ist eine einfache Lösung, indem man überprüft, ob der neue Stoploss-Kurs mindestens 1 Punkt oder mehr als der alte Stoploss ist. Für eine Verkaufsorder machen Sie es einfach umgekehrt.

      if (OrderType() == OP_BUY)
      {      
         if(Bid-OrderOpenPrice() > (Point* TrailingStop))
         {       
            double oldStopLoss = OrderStopLoss();
            double newStopLoss = Bid-Point* TrailingStop;
            double nextStopLoss = oldStopLoss + Point; // Adding 1 point to oldStopLoss, i.e. 76.78 to 76.79            
                       
            if( newStopLoss >= nextStopLoss) // checking that the new stoploss price is at least 1 point or greater then the old stoploss
            {                              
               OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss,0,0,Green);
               return;
            }
         }
      }


Hier ist die vollständige Funktion, die ich verwende. Jetzt, wo ich darüber nachdenke, hätte ich einen besseren Var-Namen als nextStopLoss verwenden können, und ich sollte auch eine Fehlerprüfung in OrderModify() einbauen.

Auch meine Trailing Stop-Funktion ist in einem EA, der mehrere Aufträge gleichzeitig geöffnet haben kann, deshalb hat sie diese Parameter, damit ich den Trailing Stop für mehrere Aufträge gleichzeitig aktualisieren kann.

void CheckTrailingStop(int order_Ticket, int trailingStopValue)
{
   double oldStopLoss;
   double newStopLoss;
   double nextStopLoss;
   int _trailingStop = trailingStopValue;
   
   if ( order_Ticket < 0) return;
                                    
   if(OrderSelect( order_Ticket, SELECT_BY_TICKET, MODE_TRADES) == false)
   {
      Print("CheckTrailingStop() - OrderSelect returned the error of ", GetLastError());
      return;   
   }
         
   if (OrderType() == OP_BUY)
   {      
      if(Bid-OrderOpenPrice() > Point*_trailingStop)
      {       
         oldStopLoss = OrderStopLoss();
         newStopLoss = Bid-Point*_trailingStop;
         nextStopLoss = oldStopLoss + Point; // Adding 1 point to oldStopLoss, i.e. 76.78 to 76.79            
                    
         if( newStopLoss >= nextStopLoss)
         {                              
            OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss,0,0,Green);
            return;
         }
      }
   }
                                             
   if (OrderType() == OP_SELL)
   {               
      if(OrderOpenPrice()-Ask > Point*_trailingStop)
      {
         oldStopLoss = OrderStopLoss();
         newStopLoss = Ask+Point*_trailingStop;
         nextStopLoss = oldStopLoss - Point; // Subtracting 1 point from oldStopLoss, i.e. 76.78 to 76.77
                    
         if( newStopLoss <= nextStopLoss || (OrderStopLoss() == 0))
         {                              
            OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss,0,0,Green);
            return;
         }
      }
   }
}

Dann habe ich in meiner start()-Funktion:

void start()
{                      
   if ( validTimePeriod == false) return;
   if ( validTrailingStop == false) return;
        
   //---- Start Main program ----
   Main();
   
   if ( EnableHedging == true)
   {
      HedgeStopLossCheck();
      CheckHedges();
   }
   
   if ( TrailingStop > 0) CheckTrailingStop( currentOrderTicket, TrailingStop);               
           
   CheckWaiting();
   
   GetOpenTradeLots();   
      
   CheckIfCurrentOrder_Closed();
}

Ich habe die anderen Funktionsaufrufe dort belassen, damit Sie sehen können, dass ich meinen Code gerne so weit wie möglich in spezifische Funktionen aufteile. Das macht die Dinge viel einfacher.

Viel Glück mit deinem EA.

 
vangrosh:

Hier ist, was ich in einem anderen Beitrag geschrieben habe, um den unterschiedlichen Ansatz zu erklären.

>>Hier ist eine einfache Lösung, indem man einfach überprüft, ob der neue Stoploss-Kurs mindestens 1 Punkt oder mehr als der alte Stoploss-Kurs beträgt. Für einen Verkaufsauftrag machen Sie es einfach umgekehrt.


Hier ist die vollständige Funktion, die ich verwende. Jetzt, wo ich darüber nachdenke, hätte ich einen besseren Var-Namen als nextStopLoss verwenden können, und ich sollte auch eine Fehlerprüfung in OrderModify() einbauen.

Auch meine Trailing Stop-Funktion ist in einem EA, der mehrere Aufträge gleichzeitig geöffnet haben kann, deshalb hat sie diese Parameter, damit ich den Trailing Stop für mehrere Aufträge gleichzeitig aktualisieren kann.

Dann habe ich in meiner start()-Funktion:

Ich habe die anderen Funktionsaufrufe dort belassen, damit Sie sehen können, dass ich meinen Code gerne so weit wie möglich in spezifische Funktionen aufteile. Das macht die Dinge viel einfacher.

Viel Glück mit Ihrem EA.

Danke - das sieht gut aus

also platzieren Sie Ihre start() Funktion am Ende des EAs

 
Ich habe auch ein Problem mit furchtbaren Fehler. Die Sache ist, ich habe nicht Stop-Loss oder Take-Profit, es scheitert einfach die ausstehende Bestellung zu platzieren, viele Pips weg vom Markt, wo es kein Problem sein sollte...
 
TheEconomist wrote >>
Ich habe auch ein Problem mit dem schrecklichen Fehler. Die Sache ist die, dass ich weder Stop Loss noch Take Profit habe, es gelingt einfach nicht, die Pending Order zu platzieren, viele Pips vom Markt entfernt, wo es kein Problem geben sollte...

Problem mit good'ole 130 ist, dass es anzeigt, (einer) eine Klasse oder Gruppe von Fehlern und nicht dazu führen, dass man eine sofortige Lösung.
Sie können sogar ein Problem beheben und es ist immer noch da

Das Einzige, was hier auftritt, ist ein Tippfehler?

Vielleicht geben Sie ein Buy Limit über Ask ein, obwohl Sie eine Buy Stop Order beabsichtigten?

FWIW

-BB-

 
BarrowBoy:

Das Problem mit der guten alten 130 ist, dass sie eine Klasse oder Gruppe von Fehlern anzeigt und nicht zu einer sofortigen Lösung führt.
Man kann sogar ein Problem beheben und es ist immer noch da

Das Einzige, was hier auftritt, ist ein Tippfehler?

Vielleicht geben Sie ein Buy Limit über Ask ein, obwohl Sie eine Buy Stop Order beabsichtigten?

FWIW

-BB-

Ich habe eine Funktion, die den Operationstyp auswählt:

int SellOperation(double ToCompare)
  {
   int op;
   if (Bid> ToCompare)
     op=OP_SELLSTOP;
   if (Bid== ToCompare)
     op=OP_SELL;
   if (Bid< ToCompare)
     op=OP_SELLLIMIT;        
   return( op);   
  }
  
  
int BuyOperation(double ToCompare)
  { 
   int op;
   if (Ask> ToCompare)
     op=OP_BUYLIMIT;
   if (Ask== ToCompare)
     op=OP_BUY;
   if (Ask< ToCompare)
     op=OP_BUYSTOP;
   return( op);
  }

int WhatOperation(int operation, double ToCompare)
  { 
   if ( operation==OP_BUY)
     return( BuyOperation( ToCompare));
   if ( operation==OP_SELL)
     return( SellOperation( ToCompare));     
  }       

etwa so:

09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily: Eröffnungsverkauf auf Level 2 für Pylon 0 @ 0.8024 bei Bid = 0.8016
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily: OrderSend Fehler 130
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily: ReliableOrderSend error : 130 : Ungültige Stops.


 

Hallo TheEconomist

nur ein paar kurze Bemerkungen...

1. Sehen Sie keine normalisiert auf ToCompare, es sei denn, WhatOperation() ist garantiert, norm'd tatsächlich gegeben haben.

2. Double comps haben Probleme - z.B. 'Conditional Statement failure... [Am Ende der Weisheit] if ( 1.4225 > 1.4225) is NOT TRUE!!!!!!'

3. Befolgen Sie die Anleitung in https://book.mql4.com/appendix/limits

Mit freundlichen Grüßen

 

Ich habe diesen Beitrag in der Hoffnung studiert, meinen Fehler in 'Quick Question' mit 130 zu lösen. Die Funktion zum Senden von Aufträgen ist vorhanden, ebenso wie die Journaleinträge mit der Druckfunktion, weiß jemand von euch, was los ist?

Vielen Dank!

Bauer Junge

 

.

wie gesehen auf .../24681

if( isBuying ) 
{ 
  if( stopLoss > 0)
  ACCTSL = Ask - ( stopLoss*Point* MyDig);

  if( takeProfit > 0)
  ACCTTP = Ask + ( takeProfit*Point* MyDig);
  // Buy
  ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, ACCTSL, ACCTTP, 
  nameEA, 16384,0,Red); 
  Print ("Stop Loss Value", ACCTSL);
  Print ("Take Profit Value", ACCTTP);

1. StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL);

SL,TP müssen mindestens StopLevel-Punkte vom Bid entfernt sein

Siehe unten (**)


2. ACCTxx = NormalizeDouble(Ask ..(..), Digits);


3. Print("Bid=",DoubleToString(Ask,Digits),", Ask=",DoubleToString(Bid,Digits));


4. Print ("Stop Loss Value",DoubleToString( ACCTSL,Digits),", stopLoss=",stopLoss);
Print ("Take Profit Value", DoubleToString(ACCTTP,Dig its),", takeProfit=",takeProfit);

Warum DoubleToString()? Print() zeigt nur VIER ZIFFERN an



Btw, ich würde auch irgendwo mindestens einmal Print("MyDig=",MyDig); Warum? kein Weg kann Sie dann haben, um es zu kümmern. Klingt vielleicht kleinlich, aber du wärst erstaunt, wie viel Spaß man mit so einfachen Dingen haben kann!


5. ALLE Ihre Probleme können leicht gelöst werden, wenn Sie alle verfügbaren Informationen zur Hand haben und diese anzeigen.

Dann können Sie mit dem guten alten Papier + Bleistift sehen, wo Missverständnisse sind.



(**)

Bezug: https://book.mql4.com/appendix/limits

StopLevel Minimum Distance Limitation.

Eine Handelsoperation wird nicht ausgeführt, wenn eine der folgenden Bedingungen gestört ist.

Auftragstyp Offener Preis StopVerlust (SL) Gewinnmitnahme (TP)
Kaufen
Modifikation ist verboten Bid-SL ≥ StopLevel TP-Gebot ≥ StopLevel
Verkaufen
Modifikation ist verboten SL-Ask StopLevel Ask-TP StopLevel
KaufLimit
Ask-OpenPrice StopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
SellLimit
OpenPrice-Bid StopLevel SL-OpenPrice ≥StopLevel OpenPrice-TP StopLevel
KaufenStopp
OpenPrice-Ask StopLevel OffenerPreis-SL StopLevel TP-OpenPrice StopLevel
VerkaufsStopp
Bid-OpenPrice StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel

 
fbj wrote >>

.

wie gesehen auf .../24681

1. StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL);

SL,TP müssen mindestens StopLevel Punkte vom Bid entfernt sein

Siehe unten (**)


2. ACCTxx = NormalizeDouble(Ask ..(..), Digits);


3. Print("Bid=",DoubleToString(Ask,Digits),", Ask=",DoubleToString(Bid,Digits));


4. Print ("Stop Loss Value",DoubleToString( ACCTSL,Digits),", stopLoss=",stopLoss);
Print ("Take Profit Value", DoubleToString(ACCTTP,Dig its),", takeProfit=",takeProfit);

Warum DoubleToString()? Print() zeigt nur VIER ZIFFERN an



Btw, ich würde auch irgendwo mindestens einmal Print("MyDig=",MyDig); Warum? kein Weg kann Sie dann haben, um es zu kümmern. Klingt vielleicht kleinlich, aber du wärst erstaunt, wie viel Spaß man mit so einfachen Dingen haben kann!


5. ALLE Ihre Probleme können leicht gelöst werden, wenn Sie alle verfügbaren Informationen zur Hand haben und diese anzeigen lassen.

Dann können Sie mit dem guten alten Papier und Bleistift sehen, wo die Missverständnisse liegen.



(**)

Bezug: https://book.mql4.com/appendix/limits

StopLevel Minimum Distance Limitation.

Eine Handelsoperation wird nicht ausgeführt, wenn eine der folgenden Bedingungen gestört ist.

Auftragstyp Offener Preis StopVerlust (SL) Gewinnmitnahme (TP)
Kaufen
Modifikation ist verboten Bid-SL ≥ StopLevel TP-Gebot ≥ StopLevel
Verkaufen
Modifikation ist verboten SL-Ask StopLevel Ask-TP StopLevel
KaufLimit
Ask-OpenPrice StopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
SellLimit
OpenPrice-Bid StopLevel SL-OpenPrice ≥StopLevel OpenPrice-TP StopLevel
KaufenStopp
OpenPrice-Ask StopLevel OffenerPreis-SL StopLevel TP-OpenPrice StopLevel
VerkaufsStopp
Bid-OpenPrice StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel

Ich kann wirklich nicht sagen, was los ist und warum das passiert

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: OrderSend (Trender Beta Test ) schlug mit Fehler #130 fehl

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: MyDig=10

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Take Profit Wert1.43155, takeProfit=110

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Stop Loss Wert1.42255, stopLoss=200

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Bid=1.44255, Ask=1.44229







 
Bauer_Boy wrote >>

Ich kann wirklich nicht sagen, was los ist und warum das passiert

Es ist wirklich an der Zeit, den gesamten Code zu zeigen. Wenn Sie zögern, können Sie PM verwenden.

Ich sehe, Sie haben TP niedriger als Bid