[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 54

 
vovan-gogan:

Non è lo stesso nel mio esempio? In cosa è diverso? Tranne che non ho aggiunto una funzione di avvio.


Meglio ancora, va così.

int start()                            // Спец. функция start
  {
    int Orders=0;
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          int ticket = OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic);     
          if (ticket>0)              // Если ордер установлен
             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)  Sleep(100); // Если ордер выбран         
          Orders++;
          Alert ("Ордер выставлен.Orders = ",Orders );
             
        }   
       Alert ("Ордеров нет. Orders = ",Orders );    
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }


                 
         
      
 
vovan-gogan:

Ma non vedo la differenza da provare. Per favore, ditemi cosa ho fatto di sbagliato.

Prova a scrivere il risultato. L'ordine potrebbe non essere impostato secondo le vostre condizioni, a causa della mancanza di controlli necessari al momento dell'impostazione. Inoltre, non sarebbe male aggiungere un gestore di errori quando non è installato per un motivo o un altro, slittamento fare > 0 - questa è la prima cosa che mostra immediatamente.
 
Si riferisce allo slippage su un ordine pendente?
 
vovan-gogan:
Intende lo slippage su un ordine pendente?


Non prendertela con il testo, impostalo e basta... Controlla.

Almeno nel tester tutto dovrebbe funzionare - se non si imposta un ordine a causa di una breve distanza, sarà impostato la prossima volta - la tua domanda era su qualcos'altro - poi finirai tutto il resto - controlla come è nel tester.

 
Roman.:


Non prendetevela con il testo - impostatelo e basta... Controllate.

Almeno nel tester tutto dovrebbe funzionare - se non si imposta un ordine a causa di una piccola distanza, la prossima volta sarà impostato - la tua domanda era su qualcos'altro - poi finirai tutto il resto - controlla come è, nel tester.


Grazie per voler aiutare, ma in questa particolare situazione vorrei che prima mi aiutaste a capire il mio errore. Se uso costantemente soluzioni sviluppate da altri, e non mi rendo conto dei miei errori, difficilmente crescerò come programmatore. Spero che tu sia d'accordo con questo
 
vovan-gogan:

Non è lo stesso nel mio esempio? In cosa è diverso? Tranne che non ho aggiunto la funzione di avvio.


Rileggete il concetto di variabili locali e globali. Inoltre, a causa di questa costruzione

 if (OrdersTotal()>= 1) return(0);  

se una posizione sarà aperta manualmente o da un altro EA sullo stesso conto di trading, l'EA non imposterà un ordine pendente quando la condizione di trading si innesca per impostare un ordine pendente, funzionerà bene per un tester di strategia.

Nel caso generale, è necessario organizzare un ciclo per gli ordini aperti o impostati da questo stesso Expert Advisor, a seconda della logica del vostro algoritmo - TS, in assenza di ordini pendenti, impostarlo e aumentare il contatore degli ordini e stampare l'informazione.

 
vovan-gogan:

Vi ringrazio per la vostra disponibilità, ma in questa particolare situazione voglio che mi aiutiate prima di tutto a capire il mio errore. Se uso costantemente soluzioni scritte da altri, e non mi rendo conto dei miei errori, difficilmente potrò crescere come programmatore. Spero che tu sia d'accordo con questo


D'accordo. Rileggete il concetto di variabili locali e globali nel terminale client.



int start()                            // Спец. функция start
  {
    int Orders=0;    
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          int ticket = OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic);     
          if (ticket>0)              // Если ордер установлен
             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)  Sleep(100); // Если ордер выбран         
          Orders++;
          Alert ("Ордер выставлен.Orders = ",Orders );
             
        }   
         
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }
 
vovan-gogan:

Grazie per la vostra disponibilità ad aiutare, ma in questa particolare situazione vorrei che prima mi aiutaste a capire il mio errore.


Fai già la domanda... :-Р

Prova la variante del mio post precedente.

Leggete il tutorial e la documentazione qui - non ho ancora visto da nessuna parte un trita e ritrita più dettagliato.

 
Grazie per la dritta sulle variabili globali e locali) leggerò di più)
 
Alexandr24:
Ditemi perché quando apro un grafico (in tempo reale) con Periodo M30 e applicare l'indicatore con parametro int shift=iBarShift(NULL,PERIOD_M5,some_time); lo shift sarà come dovrebbe essere, ma quando faccio passare lo stesso indicatore attraverso il tester con periodo M30 lo shift non viene calcolato?

Chi sa come risolvere questo problema?
Motivazione: