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

 
khorosh:


Grazie Yuri.
Cercherò di usare il vostro codice, ma più tardi, perché deve essere smontato e capire il principio di lavoro.
Sopra descritto passo non è difficile, poi dovrò smontare ogni funzione personalizzata di Mr. "N", e questo ha il più alto grado di complessità, rispettivamente, richiederà molto tempo, da 3 a 10 ore (come si dice: - Un giorno. -).

Finirò il mio codice, è "il mio habitat" e non c'è niente da studiare in esso.

Grazie ancora, Yuri.




borilunadi:
1 - Non può fare nulla! 2 - Vuole solo che gli si scriva! 3 - È inutile spiegare! 4 - Nessuna logica! 5 - Un perdente incorreggibile!

1 - Relativamente, sì.
2 - Mi ha aiutato a capire la situazione.
3 - Non è affatto inutile.
4 - Per il fatto che lei risponde - sì.
5 - Finito il semestre con cinque B, tutti gli altri voti - A.

Hai infranto le regole del forum, come me.
Ora il tuo account è degno di un avvertimento, il mio account è degno di un ban.

Vi prego di scusare le azioni irrazionali (rispondere alle critiche).
 
Link_x:

Grazie, Yuri.
Cercherò di usare il vostro codice, ma più tardi, perché ho bisogno di smontarlo e capire il principio di funzionamento.
Il passo sopra descritto non è difficile, poi dovrò smontare ogni funzione personalizzata del signor "N", e questo ha il più alto grado di complessità, rispettivamente, richiederà molto tempo, da 3 a 10 ore (come si dice: - Un giorno. -).

Finirò il mio codice, è "il mio habitat" e non c'è niente da studiare in esso.

Grazie ancora, Yuri.






Non è necessario entrare nel codice di ogni funzione per cominciare. È sufficiente capire i parametri utilizzati nella funzione, il suo scopo e il suo utilizzo. In realtà non mi sono addentrato nelle viscere di ogni funzione. L'ho approfondito solo quando ho dovuto cambiarlo in qualche modo. Voglio dire, si usano con successo telefoni cellulari, computer e televisori, senza conoscere i loro schemi esatti e come funzionano, ma questo non impedisce di usarli per i propri scopi. In questo caso, la cosa principale è sapere come usare queste funzioni. Tutte le funzioni e le loro funzioni sono descritte qui . Imparerete ad usarli dai test, che sono dati per ogni funzione. Diventerai un programmatore più velocemente se seguirai questo percorso. Ma reinventare la propria bicicletta è un percorso lungo e improduttivo. Costruire un esperto - secondo la sua versione - è come costruire una casa senza materiali da costruzione. Devi inventare tutto da solo. È molto più veloce costruire una casa quando ci sono blocchi di costruzione (funzioni).
 

Buon pomeriggio!

Potreste dirmi se la funzione AccountEquity() fa una richiesta al terminale o al broker?

La domanda è motivata dall'ipotesi che chiamare questa funzione su ogni tick possa irritare il broker (specialmente quando si esegue l'EA su diversi grafici allo stesso tempo) e di conseguenza bloccare l'account?

 
yan720:

Buon pomeriggio!

Potete dirmi se la funzione AccountEquity() fa una richiesta al terminale o al broker?

La domanda è causata dal presupposto che chiamare questa funzione su ogni tick può irritare il broker (soprattutto quando si esegue l'EA su diversi grafici contemporaneamente) e di conseguenza bloccare il conto?


Sì al broker, naturalmente)))

Il terminale non si preoccupa.... Vi darà gli ultimi dati conosciuti...

 
vadynik:
La questione è se dobbiamo passare Magic nella funzioneo no.

Questo può essere compreso se si sa a cosa serve la procedura guidata. È necessario che l'EA sia in grado di distinguere i propri ordini dagli ordini di un altro EA o dagli ordini aperti manualmente. Se hai diversi ordini buy-stop e ci sono diversi maghi o ordini manuali (senza mago) tra di loro, il mago è necessario per la funzione. In generale, sarebbe meglio impostare una magia come parametro di una funzione per universalizzare le sue funzioni. Per esempio, dovrebbe essere impostato a -1 di default.

double BuystopPrice(int Magic = -1)
{
double Price=0;
  for (int i=OrdersTotal()-1; i>=0; i--) 
     {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
          if(OrderMagicNumber()==Magic && OrderType()==OP_BUYSTOP)
          {
           Price = OrderOpenPrice();
          break;
          }
        }
     }
    return(Price);
}

In realtà, poiché il codice della tua funzione determina il prezzo di impostazione del primo ordine buy-stop solo nel ciclo, il ciclo stesso non è necessario in linea di principio.

 
khorosh:
Non è necessario entrare nel codice di ogni funzione per cominciare. È sufficiente capire i parametri che vengono utilizzati nella funzione, il suo scopo e il suo utilizzo. In realtà non mi sono addentrato nelle viscere di ogni funzione. L'ho approfondito solo quando ho dovuto cambiarlo in qualche modo. Credo che tu usi con successo telefoni cellulari, computer e televisori, senza conoscere i loro schemi esatti e come funzionano, ma questo non ti impedisce di usarli per i tuoi scopi. In questo caso, la cosa principale è sapere come usare queste funzioni. Tutte le funzioni e le loro funzioni sono descritte qui . Imparerete ad usarli dai test, che sono dati per ogni funzione. Diventerai un programmatore più velocemente se seguirai questo percorso. Ma reinventare la propria bicicletta è un percorso lungo e improduttivo. Costruire un esperto - secondo la tua versione - è come costruire una casa senza materiali da costruzione. Devi inventare tutto da solo. È molto più veloce costruire una casa quando ci sono blocchi di costruzione (funzioni).


Lei è un uomo saggio, capace di spiegare e cambiare idea se necessario. :)
Detto questo, vi ringrazio ancora.

In questo caso, lascio la costruzione di una casa da organoidi di cellule eucariotiche e uso materiali da costruzione ordinari per la sua costruzione.
 

Si prega di controllare due funzioni per verificare se ci sono errori in esse.

L'essenza del primo: dovrebbe calcolare un lotto necessario per uscire dal drawdown dopo aver chiuso una griglia di ordini (aperti a margine), se il prezzo passa un certo numero di punti (TP-points) nella giusta direzione.

L'essenza del secondo: dovrebbe chiudere la metà degli ordini della griglia, cominciando dal più vecchio.

double FindRightLot (int otype) // функция поиска лота, необходимого для выхода из просадки после 
                               //закрытия сетки ордеров
{
  double Lot=0; double TotalLot=0;
  for (int i = OrdersTotal()-1; i>0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         {
           Lot = NormalizeDouble ((OrderOpenPrice()-Bid)*OrderLots()/TP,2); 
           if (Lot>0)
           {
              TotalLot= NormalizeDouble (TotalLot+Lot,2);
           }
         }
           
       
         else if (otype == OP_SELL)
         {
           Lot = NormalizeDouble ((Ask-OrderOpenPrice())*OrderLots()/TP,2);
           if (Lot>0)
           {
            TotalLot= NormalizeDouble (TotalLot+Lot,2);
           }
           
         }
       }
     }
   }
   return (TotalLot);
   
 }
//+------------------------------------------------------------------+

void CloseHalfOrders (int otype)// ф-ция закрытия половины ордеров сетки
{
  int count = 0;
  for (int i = 0; i<= OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype)
       {
         if (otype == OP_BUY)
         { 
           if (count<CountTrades(OP_BUY)/2 && CountTrades(OP_BUY)>3 )
           
             OrderClose(OrderTicket(),OrderLots(),Bid,0,Black);
             count++;
           
         }
       
       
         else if (otype == OP_SELL)
         {
           if (count<CountTrades(OP_SELL)/2 && CountTrades(OP_SELL)>3)
           
           OrderClose(OrderTicket(),OrderLots(),Ask,0,Black);
           count++;
           
         }
       }
     }
   }
   
 }
 
Ragazzi, non potete farlo... Potete passare direttamente a MQL5, ma l'intera POSIZIONE è aperta lì....
 
yan720:


Potete dirmi se AccountEquity() interroga il terminale o il broker?

al terminale
 
vadynik:


Forse non lo chiedo esattamente, voglio dire che la funzione vedrà un magik che è impostato in una variabile globale

o dovrebbe essere passato in una funzione, anche se sospetto che non dovrebbe, dato che è globale

Se è in una variabile globale, sì, lo farà. Ma la funzione dovrebbe avere versatilità e lavorare con più di un mago, e per questo è meglio passarlo come parametro della funzione.
Motivazione: