[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 394

 

Tutto bene!!!! Se non ci sono ordini desiderati, X rimane uguale a zero con il numero magico desiderato e gli ordini saranno aperti. Se ce ne sono, X è uguale a 2 e non verranno aperti altri ordini.

Cos'altro è il problema?

- Al primo momento, si seleziona un ordine che non esiste utilizzando la funzione OrderSelect.

nel primo ciclo for(int Uy=OrdersTotal();Uy<=-1;Uy--) Quindi cosa, beh il ciclo gira di più per speranza, poi l'ho cambiato a 0, non c'è nessun cambiamento nel lavoro, questi non sono tutti errori, non cambiano, mi scuso.

 
Inserito un avviso per tracciare il lavoro del ciclo. Non capisco niente. La variabile, che è nel ciclo, solo una volta, all'inizio, con un valore di 0, e poi vendere stop 0 e comprare stop 130, che è anche sorprendente, sono simmetrici!!!! E dopo 2,5 m dell'iscrizione già dice errore 148 (broker vieta molti ordini)
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X;       
//----
       for(int Uy=OrdersTotal();Uy==0;Uy--){
OrderSelect( Uy,SELECT_BY_POS );Alert ("Uy",Uy);
if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol())
{X ++;}}  
if (X<=2){
   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Oh, che sciocchezza. All'inizio scrive sempre errore di data, circa 49 volte. Sì!!!! X rimane sempre 0 e scrive bene. In 2 ordini.

 
PRICE_OPEN !!!! - non puoi usare questo prezzo! Funziona solo per gli indicatori. Usa Bid o Ask.
 
Dimka-novitsek:

Tutto bene!!!! Se non ci sono ordini desiderati, X rimane uguale a zero con il numero magico desiderato e gli ordini saranno aperti. Se ce ne sono, X è uguale a 2 e non verranno aperti altri ordini.

Cos'altro è il problema?

- Al primo momento, si seleziona un ordine che non esiste utilizzando la funzione OrderSelect.

nel primo ciclo for(int Uy=OrdersTotal();Uy<=-1;Uy--) Quindi cosa, il ciclo gira di più per speranza, poi l'ho cambiato a 0, non c'è nessun cambiamento nel lavoro, questi non sono tutti errori, non cambiano, mi scuso.

Come può funzionare più a lungo di ?

Non importa quanti ordini sono aperti, la condizione Uy<=-1 non è soddisfatta immediatamente perché il numero di ordini è maggiore o uguale a zero immediatamente

 

Aiutami a trovare un errore,

Grazie

void TrailPositions()
{
//-----
  double BuySL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,0,1),Digits);
  double SelSL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,1,1),Digits);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL*Point
      && BuySL*Point > OrderStopLoss())// && BuySL*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL*Point
      && SelSL*Point < OrderStopLoss())// && SelSL*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
    }
  }
}

 
PapaYozh:


Se i tick girano, l'icona dell'EA è "sorridente", l'EA dovrebbe fare accordi (cioè appaiono le condizioni per farlo), ma non li fa, allora è necessario il debug.

Sistemate il comando price() nel codice dell'EA, specialmente in quei posti dove si confronta e vedete cosa esattamente viene confrontato. Forse, avete un confronto sull'uguaglianza delle variabili di tipo doppio e il risultato del confronto è sempre falso, mentre supponete che le variabili siano uguali.

Grazie mille per i consigli!!! Ho risolto il mio problema. Si è scoperto che il broker di cui avevo bisogno quando piazzavo un ordine a mercato, cioè secondo le condizioni, non ha la possibilità di piazzare livelli di stop allo stesso tempo. Ora gli ordini vengono piazzati senza alcun livello di stop e io imposto i livelli di stop immediatamente dopo ogni ordine. Ho un problema con questo: solo una piccolissima parte degli ordini viene modificata, mentre la maggior parte degli ordini mostra i seguenti risultati nella sezione "Expert Advisors":

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: aperto #30906670 vendere 0,01 CLM1 a 99,79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: ticket non valido per la funzione OrderModify
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5: aperto #30906787 comprare 0,01 ESM1 a 1337,50 ok

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15: ticket non valido per la funzione OrderModify

Ecco il testo del codice:

{
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red);


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point,Ask-TakeProfit*Point,0,Red);
ritorno(0);

}

Ed è il primo ordine che viene modificato dopo l'avvio dell'Expert Advisor!

Naturalmente, ho sbagliato la modifica dell'ordine nel codice... Per favore, consigliatemi!

 
quindi qualcuno può aiutare con una funzione che mostra gli ultimi due estremi su ZZ?
 
Cari programmatori, vi chiedo un suggerimento su come migliorare l'Expert Advisor: c'è una posizione aperta e dopo qualche tempo c'è un segnale di riapertura nella stessa direzione. Voglio riempire il secondo segnale solo se il primo ordine è già in profitto. Ho implementato questo confrontando la dimensione del saldo e il capitale (se il capitale è superiore al saldo, l'ordine aperto è in più).
Potete suggerire un codice per determinare il profitto/perdita sull'ultimo ordine aperto che avete?
 
Misura in pip, la più affidabile.
 
Roger:
Misura in pip, la più affidabile.
Puoi darmi un codice?