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

 
Vinin:

Ma anche l'intestazione dell'indicatore deve essere modificata. Tutti i buffer dovrebbero essere in grado di memorizzare il valore

E sarebbe bello calcolare la storia, ma è ovviamente una questione di gusti. E per lavorare più correttamente con gli oggetti. Ad ogni tick vengono creati oggetti con gli stessi nomi (o si crea un errore).

Ho sistemato l'intestazione.

con un buffer:

     UP_1Buffer[0] = uitog1v;
     UP_2Buffer[0] = uitog2v;
     UP_3Buffer[0] = uitog3v;
     DOWN_1Buffer[0] = ditog1v;
     DOWN_2Buffer[0] = ditog2v;
     DOWN_3Buffer[0] = ditog3v;

Capito.

Grazie mille per l'aiuto.


Per quanto riguarda i tuoi suggerimenti, mi piacerebbe farli, ma non posso farli da solo, purtroppo.

 
artmedia70:

Cercate di mettere in parole quello che avete scritto qui:

Personalmente, al primo sguardo ho trovato il tuo enigma: se uno non è uguale a uno, allora chiudi l'ordine...

Non ho guardato il resto dopo quello...

SZY e non provare, non pensare nemmeno che sia possibile scrivere un buon EA in un solo ciclo...

Ecco l'idea:

Punto di entrata nel mercato: in qualsiasi momento, se non ci sono posizioni pendenti, tanto meno aperte.

Il robot apre 2 posizioni pendenti, con la stessa distanza in pip dal prezzo corrente (questa è una variabile personalizzata PriceDistance).

Gli ordini pendenti entrambi con lo stesso TP, SL, TS (come l'immagine speculare del prezzo corrente.

Ed entrambi per lo stesso tempo (in prospettiva la variabile "TimeStop").

Tutto....

In pratica: le posizioni precedenti vengono chiuse (sia con il tempo di scadenza, sia sullo SL o TP - non importa), il terminale viene rilasciato, subito dopo vengono aperte le stesse posizioni con gli stessi parametri, ma, partendo dal prezzo corrente, in un nuovo intervallo. Più avanti, secondo il ciclo.

L'idea è primitiva, 100% pluator, ma ho intenzione di muovermi in questa direzione e collegarla ad altri segnali, per esempio Volumi a certi valori a certi timeframes....

Ecco perché ho bisogno del software in fretta....

Così mi sono dato il compito di scriverlo...

 
Buona sera! Ha scritto il costrutto più semplice qui, per calcolare il profitto disponibile, su ogni tick. Beh, non funziona! L'ho guardato per 10 minuti, mangiando il codice con gli occhi. Non vedo alcun errore. Ecco il codice.
//----
        double Profit;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ||
      
 OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
 
 
//----
Il numero magico è giusto, l'ho controllato quattro volte. Le staffe, tutto quello che mi è venuto in mente di guardare, tutto sembra essere giusto. Forse sto scrivendo/confrontando l'ordine sbagliato? Ho guardato il riferimento. Aiutatemi per favore! Non posso farlo senza di voi! Puoi dirmi cosa potrebbe essere sbagliato?
 
E sai, separatamente tutte e tre le condizioni funzionano!!!
 double Profit;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( OrderType( ) ==OP_SELL ){Alert ("i ", i ," OP_SELL ", Profit);}

if( OrderSymbol()==Symbol()){Alert ("i ", i ," Symbol() ", Profit ,Symbol(), OrderSymbol());}

if( OrderMagicNumber( )==2000  ) {Alert ("i ", i ," OrderMagicNumber( ) ", Profit , OrderMagicNumber( ));}



if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ||
      
 OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
Sono scioccato e confuso!!!
 
dkfl.zrjdktdbx:
Buona sera! Ho scritto una semplice costruzione per calcolare il profitto disponibile su ogni tick. Beh, non funziona! L'ho guardato con gli occhi per 10 minuti. Non vedo l'errore. Il codice di Magik è giusto, l'ho controllato quattro volte. Le staffe, tutto quello che ho potuto pensare, tutto sembra essere giusto. Forse sto scrivendo/confrontando l'ordine sbagliato? Ho guardato il riferimento. Aiutatemi per favore! Non posso farlo senza di voi! Puoi dirmi cosa potrebbe essere sbagliato?


Mancano alcune parentesi.

double Profit=0;
for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );

if( ( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_SELL ) ||
      
( OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUY ) ){
 
  
 Profit=Profit+OrderProfit( ) ;Alert ("i ", i ," Profit ", Profit);}}
 

Questo sembra essere il caso. Anche se è meglio mantenere la semplicità.

double Profit=0;
for ( i=OrdersTotal();i>0;i--){ 
   OrderSelect(i-1,SELECT_BY_POS );
   if(OrderSymbol()==Symbol()) {
      if( OrderMagicNumber( )==2000 && OrderType( ) ==OP_SELL )  Profit+=OrderProfit( );
      if( OrderMagicNumber( )==1000 && OrderType( ) ==OP_BUY  )  Profit+=OrderProfit( );
   }
   Alert ("i ", i ," Profit ", Profit);
}
 

Ho questa domanda - in MT4: (2/3*9 == 2*9/3) ?

         Comment(
            "\n",
            "\n", "2/3*9        = ", 2/3*9,
            "\n", "2*9/3        = ", 2*9/3,
            "\n",
         "\n" );


Grazie!

 
chief2000:

Ho questa domanda - in MT4: (2/3*9 == 2*9/3) ?


Grazie!


Qual è il punto?

Controllate con una calcolatrice - lo scoprirete.

Vedere la documentazione - come vengono calcolate le espressioni.

Dovresti almeno leggere un libro di testo...

"È facile vedere che l'ordine di calcolo delle espressioni in un programma è simile all'ordine di calcoli simili in matematica, ma differisce nel calcolo dei tipi di valori delle espressioni intermedie, il che influenza significativamente il risultato finale dei calcoli. In particolare (in contrasto con le regole accettate in matematica), l'ordine degli operandi in un'espressione non è di poca importanza. Per dimostrarlo, facciamo un piccolo esempio. Problema 6: Calcolare i valori delle espressioni A/B*C e A*C/B per i numeri interi A, B e C.


Intuitivamente, ci si aspetta che il risultato dei calcoli in entrambi i casi sia lo stesso. Tuttavia, questo è vero solo per i numeri reali. Quando si calcolano i valori di espressioni composte da operandi interi, il risultato intermedio è molto importante. In questo caso, la sequenza degli operandi è di fondamentale importanza:

int A = 3; // Значение целого типа
int B = 5; // Значение целого типа
int C = 6; // Значение целого типа
int Res_1 = A/B*C; // Результат 0 (ноль)
int Res_2 = A*C/B; // Результат 3 (три)

Tracciamo il processo di calcolo dell'espressione A/B*C:

1. Prima (da sinistra a destra) verrà calcolato il valore dell'espressione A/B. Secondo le regole di cui sopra, il valore dell'espressione (3/5) sarà il valore intero 0 (zero).

2. Calcola l'espressione 0*C (zero moltiplicato per C). Il risultato è il valore intero 0 (zero).

3. Il risultato complessivo (valore della variabile Res_1) è un valore intero di 0 (zero).

Vediamo ora come si sviluppano gli eventi nel calcolo dell'espressione A*C/B.

1. Calcolo di A*C. Il valore di questa espressione è l'intero 18 (3*6=18).

2. Calcolo dell'espressione 18/B. La risposta è ovvia: (18/5) dopo aver scartato la parte frazionaria, il risultato sarà un intero 3 (tre).

Il risultato totale (valore di Res_2) è intero 3 (tre).

Questo esempio mostra un piccolo frammento di programma che calcola i valori delle variabili di tipo intero. Se sostituiamo queste variabili con delle costanti, ma usiamo gli stessi valori, il risultato finale sarà lo stesso. Quando si calcolano espressioni in cui si usano numeri interi, bisogna fare molta attenzione al contenuto delle linee del programma. Altrimenti, potrebbe verificarsi un errore nel programma, che è molto difficile da rilevare in seguito (specialmente in programmi grandi). Questo problema non si verifica nel caso di calcoli in cui sono coinvolti solo numeri reali. Tuttavia, se usate operandi di tipi diversi in un'espressione complessa, il risultato finale può dipendere interamente da un frammento generato a caso che contiene la divisione di interi.

Il concetto e le proprietà generali degli operatori sono discussi nella sezione Operatori, e il capitolo Operatori rivela le proprietà proprie di ogni operatore".

 
FileFlush è lo stesso che salvare un file?
 
Roman.:


Qual è il problema?

Controllate con una calcolatrice - lo scoprirete.

Ho controllato - sia Casio che la calcolatrice Microsoft dicono che 2/3*9=6.


 
chief2000:

Controllato - sia Casio che la calcolatrice Microsoft dicono 2/3*9=6.



Bene. Qual è il problema?