[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 481

 
Cosa c'è di sbagliato in OrderOpenPrice( )? ??? È una semplice funzione normale!!! L'ordine che ho preselezionato.
 
Scusa, cosa c'è? La funzione OrderSend funziona per me, mentre OrderClose si mette in mostra!
 
Dimka-novitsek:
Scusa, cosa c'è? La funzione OrderSend funziona per me, mentre OrderClose si mette in mostra!
total = OrdersTotal();
  for(i=total-1;i>=0;i--)
    {
    OrderSelect(i, SELECT_BY_POS);
    type   = OrderType(); result = false;
    switch(type)
          { 
          case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), l_SlipPage, Red ); break;
          case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), l_SlipPage, Red ); break; 
          }
    if(!result)
      {
      error =  GetLastError(); 
      errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + ErrorDescript(error); 
      Print(errorcomment);
      }  
    }
questo è un esempio di chiusura di tutti gli ordini, si noti che bai e sell sono chiusi da bid e ask ....
 
Oh, grazie!!!
 
7777877:

Grazie mille per le risposte precedenti. Tutto funziona e quasi tutto è chiaro... Ora, a proposito di quel "quasi".

1. In quale riga (vedi file allegato per l'indicatore) c'è l'indicazione che la linea calcolata sui dati dell'array deve essere visualizzata nella finestra del terminale client?

2. Perché la funzione IndicatorBuffers è necessaria (o meglio, in quali situazioni dovrebbe essere usata), se il numero di buffer può essere dichiarato come una stringa

Grazie in anticipo per la risposta

#property indicator_buffers 3                                           //объявляем количество буферов

questa stringa si dichiara il numero di buffer di indicatori visibili nel terminale

   IndicatorBuffers(4);                                                 //устанавливаем общее количество всех индикаторов, участвующих в расчете всех индикаторных линий

questa stringa dichiara il numero totale di buffer utilizzati dall'indicatore per i calcoli (3 visibili e 1 nascosto)

se non avete bisogno di buffer aggiuntivi, non avrete bisogno di questa stringa

Il numero di buffer non può superare 8 e dovrebbe essere inferiore al valore specificato nella proprietà indicator_buffers. Ecco un buon esempio.


 
Buongiorno! Ditemi, è davvero necessario normalizzare i prezzi di domanda e offerta?
NormalizeDouble(Bid, Digits)
Perché io ce l'ho così
for(int i=1; i<=OrdersTotal(); i++) {  
            if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
         if (OrderMagicNumber( ) !=magicnumber)continue;
         if (OrderType()==0){ BUY++; ticket=OrderTicket( );Print( "BUY++   " , BUY  ,"  ticket ",ticket);}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );Print( "SELL++   " , SELL  ,"  ticket ",ticket);}    } }
         
  
  if (strela1<strela2&&SELL==0&&BUY!=0
  ){ udalenie ();
              
   OrderSend(Symbol( ), OP_BUY, lot, Ask, 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
      Print( "strela1<strela2&&BUY==0&&SELL!=0 " , GetLastError()); }
            
  if (strela1>strela2){ udalenie ();
                
   OrderSend(Symbol( ), OP_SELL, lot, Bid, 3*Point, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
        Print( "strela1>strela2&&SELL==0&&BUY!=0 " , GetLastError()); }
      
    if (strela1<strela2&&BUY==0&&SELL==0){    
            
           OrderSend( Symbol( ), OP_BUY, lot, Ask, 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);  
            Print( "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),
"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }
           
   if (strela1>strela2&&BUY==0&&SELL==0){  

Fa così 2012.11.01 11:31:00 AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE 129Prezzo errato Non succedeva da anni! Non è successo neanche ieri

 
Dimka-novitsek:
Buongiorno! Ditemi, i prezzi di domanda e offerta hanno davvero bisogno di essere normalizzati? Perché ho questo

Fa così 2012.11.01 11:31:00 AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE 129 Prezzo errato Non è mai successo prima!!! Non l'ho visto neanche ieri.

Nel tester non ne hai bisogno, ma nell'on-line devi fare tutto quello che il server DC ti impone se vuoi lavorare.
 
Dimka-novitsek:
Buongiorno! I prezzi di domanda e offerta hanno davvero bisogno di essere normalizzati?

Fa così 2012.11.01 11:31:00 AUDUSD,M15: strela1<strela2&&SELL==0&&BUY!=0 129

ERR_INVALID_PRICE 129 Prezzo errato Non succedeva da anni! Non era neanche ieri


Non sempre così...

"" Prezzo d'offerta o di domanda errato, forse prezzo non normalizzato. È necessario aggiornare i dati dopo un ritardo di 5 secondi o più utilizzando la funzione RefreshRates e riprovare. Se l'errore persiste, è necessario fermare tutti i tentativi di trading e cambiare la logica del programma"". "DALLA DOCUMENTAZIONE".

Se su demo o reale - non funzionerà. Molto spesso si cerca di aprire due ordini in fila. Questo funzionerà in Strategy Tester. Avreste bisogno di un ritardo tra l'apertura degli ordini.

 

Grazie!!! Metti la normalizzazione... E dannazione, cosa diavolo sta succedendo in tutto !!!!!! Ho la testa in fiamme. Sembra più facile della geometria del liceo.


 
Sepulca:


Non sempre così...

"" Prezzo di domanda o offerta errato, forse prezzo non normalizzato. È necessario aggiornare i dati dopo un ritardo di 5 secondi o più utilizzando la funzione RefreshRates e riprovare. Se l'errore persiste, è necessario fermare tutti i tentativi di trading e cambiare la logica del programma"". "DALLA DOCUMENTAZIONE".

Se su demo o reale - non funzionerà. Stai cercando di aprire due ordini di fila molto spesso. Questo funzionerà in Strategy Tester. Mettere un ritardo tra gli ordini aperti.

Cosa significa "non sempre"? Il codice deve essere UNIVERSALE, cioè deve funzionare con QUALSIASI società di intermediazione (indipendentemente dal numero di cifre nelle quotazioni e tutti i tipi di trucchi del server della società di intermediazione per rifiutare l'esecuzione tempestiva degli ordini di compravendita)!
Motivazione: