Dannato errore 130 all'inferno - pagina 3

 
delcor wrote >>

Vangrosh

grazie per l'input

puoi aiutarmi a capire

è corretto

Faccio un EA con una traccia automatica

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

{
se (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // piazza un TP e SL
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // piazza il TP
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // controllare vero
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // se vero modificare ordine
Print("Error_Modify - ",GetLastError());
else str=StringConcatenate("\n Il mio numero di ticket è ", OrderTicket(), " e il mio stop loss è ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // nuovo codice
}
}
}

Ecco cosa ho scritto in un altro post, spiegando il diverso approccio.

>>Ecco una facile correzione semplicemente controllando che il nuovo prezzo di stopploss sia almeno 1 punto o maggiore del vecchio stoploss. Basta fare il contrario per un ordine di vendita.

      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;
            }
         }
      }


Ecco la funzione completa che uso. Ora che ci penso avrei potuto usare un nome migliore di nextStopLoss, e dovrei anche aggiungere il controllo degli errori a OrderModify().

Anche la mia funzione Trailing Stop è in un EA che può avere più ordini aperti allo stesso tempo, ecco perché ha quei parametri così posso aggiornare il Trailing Stop su più ordini allo stesso tempo.

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;
         }
      }
   }
}

Poi nella mia funzione start() ho:

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();
}

Ho lasciato le altre chiamate di funzione lì solo per farvi vedere che mi piace dividere il mio codice in funzioni specifiche il più possibile. Rende le cose molto più facili.

Buona fortuna con il tuo EA.

 
vangrosh:

Ecco cosa ho scritto in un altro post, spiegando il diverso approccio.

>>Ecco una facile correzione semplicemente controllando che il nuovo prezzo di stoploss sia almeno 1 punto o maggiore del vecchio stoploss. Basta fare il contrario per un ordine di vendita.


Ecco la funzione completa che uso. Ora che ci penso avrei potuto usare un nome migliore di nextStopLoss, e dovrei anche aggiungere il controllo degli errori a OrderModify().

Anche la mia funzione Trailing Stop è in un EA che può avere più ordini aperti allo stesso tempo, ecco perché ha quei parametri così posso aggiornare il Trailing Stop su più ordini allo stesso tempo.

Poi nella mia funzione start() ho:

Ho lasciato le altre chiamate di funzione lì solo per farvi vedere che mi piace dividere il mio codice in funzioni specifiche il più possibile. Rende le cose molto più facili.

Buona fortuna con il tuo EA.

grazie - sembra buono

quindi metti la tua funzione start() in fondo all'EA

 
Anch'io ho un problema con un errore tremendo. Il fatto è che non ho stop loss o take profit, semplicemente non riesce a piazzare l'ordine pendente, un sacco di pips lontano dal mercato dove non ci dovrebbero essere problemi...
 
TheEconomist wrote >>
Anch'io ho un problema con un errore tremendo. Il fatto è che non ho stop loss o take profit, semplicemente non riesce a piazzare l'ordine pendente, un sacco di pips lontano dal mercato dove non ci dovrebbero essere problemi...

Il problema con il buon 130 è che indica (uno di) una classe o un gruppo di errori e non porta a nessuna soluzione immediata.
Si può anche risolvere un problema e il suo ancora lì

L'unica cosa che si verifica qui è un errore di battitura?

Forse state inserendo un Buy Limit sopra l'Ask, quando intendevate un ordine Buy Stop?

FWIW

-BB-

 
BarrowBoy:

Il problema con il buon 130 è che indica (uno di) una classe o un gruppo di errori e non porta a nessuna correzione immediata.
Si può anche risolvere un problema ed è ancora lì

L'unica cosa che si verifica qui è un errore di battitura?

Forse state inserendo un Buy Limit sopra l'Ask, quando intendevate un ordine Buy Stop?

FWIW

-BB-

Ho una funzione che seleziona il tipo di operazione:

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));     
  }       

come questo:

09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily: Apertura Sell sul livello 2 per pilone 0 @ 0.8024 mentre bid = 0.8016
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily: OrderSend errore 130
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily: Errore ReliableOrderSend : 130: Stop non valido.


 

Ciao TheEconomist

solo alcune cose veloci...

1. Non vedere alcuna normalizzazione su ToCompare, a meno che WhatOperation() non sia garantito per avere normato l'effettivo dato.

2. Le doppie comps hanno problemi - ad esempio, 'fallimento della dichiarazione condizionale... [A malincuore] se ( 1.4225 > 1.4225) NON è TRUE!!!!!!'

3. Segui la guida in https://book.mql4.com/appendix/limits

Saluti

 

Ho studiato questo post nella speranza di risolvere il mio errore in 'Domanda veloce' con 130. La funzione di invio dell'ordine è presente così come le voci del giornale con la funzione Print, qualcuno di voi sa cosa sta succedendo?

Grazie,

Ragazzo Bauer

 

.

come visto su .../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 devono essere almeno punti StopLevel lontano da Bid

Vedi sotto (**)


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);
5. Print ("Take Profit Value", DoubleToString(ACCTTP,Dig its),", takeProfit=",takeProfit);

Perché DoubleToString()? Print() visualizza solo QUATTRO CIFRE



Btw, io farei anche somewere almeno una volta Print("MyDig=",MyDig); Perché? Può sembrare insignificante, ma sareste stupiti dai divertimenti che circondano cose così semplici!


5. Tutti i vostri problemi possono essere facilmente risolti ottenendo tutte le informazioni disponibili a portata di mano e visualizzandole.

Poi, con la buona vecchia carta + matita si può vedere dove sono le incomprensioni.



(**)

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

StopLevel Limitazione della distanza minima.

Un'operazione di compravendita non sarà eseguita se una delle seguenti condizioni è disturbata.

Tipo di ordine Prezzo aperto StopLoss (SL) TakeProfit (TP)
Compra
La modifica è proibita Bid-SL ≥ StopLevel TP-Bid ≥ StopLevel
Vendere
La modifica è proibita SL-Ask StopLevel Ask-TP StopLevel
BuyLimit
Ask-OpenPrice StopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
SellLimit
OpenPrice-Bid StopLevel SL-OpenPrice ≥StopLevel OpenPrice-TP StopLevel
BuyStop
OpenPrice-Ask StopLevel OpenPrice-SL StopLevel TP-OpenPrice ≥ StopLevel
SellStop
Bid-OpenPrice StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel

 
fbj wrote >>

.

come visto su .../24681

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

SL,TP devono essere almeno punti StopLevel lontano da Bid

Vedi sotto (**)


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);
5. Print ("Take Profit Value", DoubleToString(ACCTTP,Dig its),", takeProfit=",takeProfit);

Perché DoubleToString()? Print() visualizza solo QUATTRO CIFRE



Btw, io farei anche somewere almeno una volta Print("MyDig=",MyDig); Perché? Può sembrare insignificante, ma sareste stupiti dai divertimenti che circondano cose così semplici!


5. Tutti i vostri problemi possono essere facilmente risolti ottenendo tutte le informazioni disponibili a portata di mano e visualizzandole.

Poi, con la buona vecchia carta + matita si può vedere dove sono le incomprensioni.



(**)

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

StopLevel Limitazione della distanza minima.

Un'operazione di compravendita non sarà eseguita se una delle seguenti condizioni è disturbata.

Tipo di ordine Prezzo aperto StopLoss (SL) TakeProfit (TP)
Compra
La modifica è proibita Bid-SL ≥ StopLevel TP-Bid ≥ StopLevel
Vendere
La modifica è proibita SL-Ask StopLevel Ask-TP StopLevel
BuyLimit
Ask-OpenPrice StopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
SellLimit
OpenPrice-Bid StopLevel SL-OpenPrice ≥StopLevel OpenPrice-TP StopLevel
BuyStop
OpenPrice-Ask StopLevel OpenPrice-SL StopLevel TP-OpenPrice ≥ StopLevel
SellStop
Bid-OpenPrice StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel

Davvero non riesco a capire cosa sta succedendo e perché questo sta accadendo

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: OrderSend (Trender Beta Test) fallito con errore #130

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 Value1.43155, takeProfit=110

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

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







 
Bauer_Boy wrote >>

Davvero non riesco a capire cosa sta succedendo e perché questo accade

È davvero il momento di mostrare l'intero codice. Se esitate, potete usare il PM.

Vedo che hai TP più basso allora Bid