[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 126

 
agat8430:


Poi ditemi come modificare il codice in modo che non sembri violato, se capite cosa sto dicendo. È la mia prima volta sul forum e ho ricevuto una bella risposta.

"Le persone geniali hanno una risposta geniale".


Rendere i nomi delle variabili "leggibili".
 
hoz:


No, non senza una fermata. Ne ho appena pubblicato un pezzo. Ecco la mia funzione Breakeven:

La linea mostra chiaramente che se lo stop calcolato è uguale a quello che hai già, non ci sarà nessuna modifica! Giusto? Quindi l'assegno era inizialmente lì? Ma l'errore 1 spuntava costantemente, finché non avevo inserito un'altra condizione nell'inizio prima della funzione di modifica:

Ecco perché.... Questo è quello che voglio capire. Penso di aver descritto tutto accuratamente.

Questa funzione viene utilizzata per tutte le modifiche, come l'impostazione di SL e TP, lo spostamento di posizioni e ordini al livello basso, la pesca a strascico con tentativi e controlli di errori.

E l'inizio deve solo prescrivere laselezione della posizione, le condizioni e le misure precauzionali. Ecco la funzione:

void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3)
  {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0)
    { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(5000); RefreshRates(); ModifyCnt++;
} } }
È piccolo, ma è grande!
 
borilunad:

Per i nuovi arrivati, prima di tutto:

Navigatore di forum e risposte alle domande più frequenti. Lettura altamente raccomandata!( 1 2 3 4 5 6 ) 51 18.02.2011 FAQ


Grazie! Lo leggerò sicuramente.

Al mondo non mancano le persone buone.

 
hoz:

Date alle variabili un nome "leggibile".


Voglio modificare non tutti gli ordini aperti ma solo l'inizio e l'ultimo ordine T/P. Aiutami. ecco il codice

 /* Так и до бана не далеко */
 

Ciao a tutti, sto prendendo i valori dell'indicatore in una finestra separata da una barra già formata (cioè la barra 1) che conto una volta sulla barra 0 al suo primo tick. Tutto funziona rapidamente e correttamente.Ma se spengo il computer e dopo un po' di tempo lo riaccendo, gli indicatori continuano a funzionare correttamente, ma i loro valori al momento in cui il computer era spento, c'è solo un posto vuoto. cioè ci sono valori di indicatori prima e dopo l'accensione del computer. Ma basta passare avanti e indietro da TF a TF - tutti i valori "mancanti" appaiono. Gliindicatori sono standard - CCI, AO, ecc. I codici sono stati presi dai forum, li sto allegando, per favore spiegatemi dove sbaglio e cosa non capisco.



      Код №1
        ------


int start()
  {  
              
//--------------------------------------------------------------------
   Fun_New_Bar();                               // Обращение к ф-ии
   if (New_Bar==false)                          // Если бар не новый..
      return;                                   // ..то уходим
//--------------------------------------------------------------------    
        
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------
   return(0);
 
  }
   
//+------------------------------------------------------------------+  
void Fun_New_Bar()                              // Ф-ия обнаружения ..
  {                                             // .. нового бара
   static datetime New_Time=0;                  // Время текущего бара
   New_Bar=false;                               // Нового бара нет
   if(New_Time!=Time[0])                        // Сравниваем время
     {
      New_Time=Time[0];                         // Теперь время такое
      New_Bar=true;                             // Поймался новый бар
     }
  }
//--------------------------------------------------------------------  



        Код №2
        ------


int start()
{  
     if (NewBar() == true)
  {  
         
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------           
  }    

   return(0); 
}
   
//+------------------------------------------------------------------+    
bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
}


      
          Код №3
          ------


//--- buffers
double ExtMapBuffer1[];
//--- for one bar
datetime Last,New;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    New=Time[0]; 
      
     if(Last!=New)     
   {
  
  int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------             
   
    Last=New;
   }     
//----
   return(0);
  }
//+------------------------------------------------------------------+




       Код №4
       ------


int start()
  {
      if(last>=Time[0]) return;
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
        
//-------------------------------              
       
      last=Time[0];      
   } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

 
borilunad:

Ho una funzione per tutte le modifiche come l'impostazione di SL e TP, il trasferimento a B/S, la ricerca di posizioni e ordini con tentativi e controlli di errori.

Ho solo bisogno di prescrivere la selezione della posizione, le condizioni e gli avvertimenti all'inizio. Ecco la funzione:

Piccolo ma intelligente!


Wow :) Grazie. Dovrò dare un'occhiata!
 
agat8430:


Voglio modificare non tutti gli ordini aperti ma solo l'inizio e l'ultimo ordine su T/P Voglio fare un EA per me stesso.

In realtà, dovremmo "schermare" tutti gli ordini chiusi, senza contare il mago e il simbolo, ovviamente. Poi dovresti selezionare l'ordine iniziale e l'ultimo da modificare.

L'ordineSelect (g_pos_300, SELECT_BY_POS, MODE_TRADES); - questo è l'ultimo ordine.

E la OrderSelect(0, SELECT_BY_POS, MODE_TRADES); - questo sarà il primo ordine.

Questo è un ramo con domande sulla lingua, e ho risposto alla tua domanda. I bot non sono impegnati nella riprogettazione qui. Ma puoi trovare tutto per includerlo nell'Expert Advisor se hai una minima comprensione del linguaggio. Spero che questo abbia aiutato...

 
agat8430:


Voglio che non modifichi tutti gli ordini aperti ma solo l'inizio e l'ultimo ordine T/P. Voglio che non modifichi tutti gli ordini aperti ma solo l'ultimo ordine T/P.

Per catturare gli oggetti giusti, usa le "Caratteristiche utili" di Kim per quasi tutte le occasioni possibili!

https://www.mql5.com/ru/forum/131859

 
hoz:

In generale, gli ordini chiusi dovrebbero essere "schermati", senza contare il mago e il simbolo, ovviamente. Poi seleziona l'ordine iniziale e l'ultimo da modificare.

L'ordineSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES); - questo è l'ultimo ordine.

E la OrderSelect(0, SELECT_BY_POS, MODE_TRADES); - questo sarà il primo ordine.

Questo è un ramo con domande sulla lingua, e ho risposto alla tua domanda. I bot non sono impegnati nella riprogettazione qui. Ma puoi trovare tutto per includerlo nell'Expert Advisor se hai una minima comprensione del linguaggio. Spero che questo abbia aiutato...

Spiacente, non funziona! Non il primo, non l'ultimo!
 
MK07:

Prendo i valori degli indicatori in una finestra separata da una barra già formata (cioè dalla barra #1) che conto una volta sulla barra #0 al suo primo tick. tutto funziona rapidamente e correttamente. ma se spengo il computer e dopo qualche tempo riaccendo, gli indicatori continuano a funzionare correttamente, ma i loro valori al momento in cui il computer era spento non esistono.Tutto ciò di cui ho bisogno per passare avanti e indietro tra TF e TF, tutti i valori "mancanti" riappariranno.

Codice #1

        ------


int start()
  {  
              
//--------------------------------------------------------------------
   Fun_New_Bar();                               // Обращение к ф-ии
   if (New_Bar==false)                          // Если бар не новый..
      return;                                   // ..то уходим
//--------------------------------------------------------------------    
        
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------
   return(0);

  }
   
//+------------------------------------------------------------------+  
void Fun_New_Bar()                              // Ф-ия обнаружения ..
  {                                             // .. нового бара
   static datetime New_Time=0;                  // Время текущего бара
   New_Bar=false;                               // Нового бара нет
   if(New_Time!=Time[0])                        // Сравниваем время
     {
      New_Time=Time[0];                         // Теперь время такое
      New_Bar=true;                             // Поймался новый бар
     }
  }

//--------------------------------------------------------------------  

        Код №2
        ------


int start()
{  
     if (NewBar() == true)
  {  
         
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------           
  }    

   return(0); 
}
   
//+------------------------------------------------------------------+    
bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }

}

         Код №3
          ------


//--- buffers
double ExtMapBuffer1[];
//--- for one bar
datetime Last,New;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    New=Time[0]; 
      
     if(Last!=New)     
   {
  
  int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
//-------------------------------      

   { 

       Код №4
       ------


int start()
  {
      if(last>=Time[0]) return;
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
        
//-------------------------------              
       
      last=Time[0];      
   } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

Usa il pulsanteSRC in alto per incollare il codice! Nessuno si metterà a curiosare in questo modo. L'ho incollato per voi. Puoi fare lo stesso nel tuo post.
Motivazione: