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

 
snail09:
O contate tutte le parentesi di sinistra, poi tutte le parentesi di destra, poi confrontate le quantità, o commentate le funzioni una per una finché non trovate l'errore. Il gusto e il colore di ognuno (design del codice sorgente) è diverso.
ci sono 4 parentesi di apertura e 4 parentesi di chiusura, va bene. Ma come i commenti possano aiutarmi non sono del tutto sicuro
 
Pinki:
Ci sono 4 parentesi di apertura e 4 parentesi di chiusura, va bene. Ma come i commenti possono aiutarmi non capisco bene

Potete commentare prima le funzioni personalizzate, poi commentare i cicli, i costrutti logici... Vi posso assicurare che troverete una corrispondenza con la vostra staffa con il taglio sequenziale. O forse hai dimenticato di mettere anche ";" da qualche parte...

Non stai scambiando IF per FOR?

Scusa, non l'ho notato subito.

   // Перебор в цикле всех рыночных и отложенных ордеров
   for(int i=0;i<=OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
         // Если инструмент и магик соответствуют - значит ордер наш
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
            {
            // Подсчитываем только рыночные ордера
            if(_Type==OP_BUY || _Type==OP_SELL) 
               {
               op++;
               }
            }
         }
     }

Confrontalo con questo frammento. È solo una variante.

 
001:

Chi può spiegare perché il sesto ordine non si è aperto sulla candela e cosa fare per farlo aprire?

Diario.

2011.11.04 19:42:21 1999.11.04 20:00 RLB_FLAT GBPUSD,H4: aprire #7 vendere stop 0,10 GBPUSD a 1,62233 sl: 1,64443 tp: 1,57089 ok
2011.11.04 19:42:21 1999.11.04 20:00 Tester: #6 cancellato per scadenza
2011.11.04 19:42:10 1999.11.04 12:00 RLB_FLAT GBPUSD,H4: aprire #6 vendere stop 0,10 GBPUSD a 1,63373 sl: 1,64570 tp: 1,62652 ok
2011.11.04 19:42:09 1999.11.04 08:00 Tester: #5 cancellato per scadenza
2011.11.04 19:42:06 1999.11.04 00:00 RLB_FLAT GBPUSD,H4: aprire #5 vendere stop 0,10 GBPUSD a 1,63622 sl: 1,64702 tp: 1,63411 ok
2011.11.04 19:42:00 1999.11.02 04:00 Tester: #4 cancellato per scadenza
2011.11.04 19:41:53 1999.11.01 20:00 RLB_FLAT GBPUSD,H4: aprire #4 vendere stop 0,10 GBPUSD a 1,63365 sl: 1,64917 tp: 1,61097 ok

Il quarto, quinto e sesto ordine in sospeso sono stati cancellati per scadenza.

Aumentare la loro durata o impostare 0 (zero), vedi. OrdinaModifica()

 
мmersi:

Il quarto, quinto e sesto rinvio sono stati cancellati a causa della loro data di scadenza.

Aumentare la loro data di scadenza o impostarla a 0 (zero) vedi OrderModify(). OrdinaModifica()


Quello che mi confonde è che prima che il 6° ordine scadesse (è scaduto alle 20:00) c'era una candela al ribasso alle 16:00. Questo può essere visto nell'immagine.
 
mersi:

1. La funzione trova l'ordine con il ticker più alto nella storia, il che significa l'ultimo ordine chiuso (a meno che, naturalmente, non ci sia un caso eccezionale, per il quale è preferibile l'opzione con il tempo massimo di chiusura).

2. Secondo le condizioni , il primo ordine viene aperto con il TP/SL specificato e solo il secondo ordine può essere aperto con il nuovo TP/SL, il che significa che la funzione può restituire zero solo se il primo trade era zero, ma non se non ci sono ordini chiusi nella storia.

Un'ultima cosa. Nella tua variante l'uso di j e di un altro SELECT nella funzione è ridondante.

è sufficiente:

if (t<OrderCloseTime()) {
         t=OrderCloseTime();
      Profit=OrderProfit()+OrderSwap()+OrderCommission();
  }
   return(Profit);

1. Può fidarsi al 100% del suo broker (o del broker del cliente), sulla sua numerazione dei biglietti? Il tempo è ancora un valore più stabile - qui può solo cambiare il tempo manualmente regolando la storia. IMHO - meglio usare il tempo.

2. Se il cliente avrà bisogno di cambiare la logica, allora la vostra funzione potrebbe dover essere riscritta.

3. Suggerisci

Profit=OrderProfit()+OrderSwap()+OrderCommission();

per usarlo all'interno di un ciclo? Per quale motivo? Puoi usarlo solo una volta per l'ultimo ordine già trovato.

А... Il vostro cliente non testerà e non ottimizzerà. Capisco...

 

GlobalVariableSetOnCondition() - potete spiegare in parole povere cosa fa questa funzione? La descrizione nella guida è molto confusa, non riesco a capire alcuni punti?

Imposta un nuovo valore della variabile globale esistente se il valore corrente della variabile è uguale al valore del terzo parametro check_value. Se la variabile non esiste, la funzione genera un errore ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) e restituisce FALSE. La funzione restituirà TRUE se eseguita con successo, altrimenti restituirà FALSE. Per ottenere le informazioni sugli errori, deve essere chiamata la funzione GetLastError(). Se il valore corrente della variabile globale è diverso da check_value, la funzione restituisce FALSE.
Questa funzione permette l'accesso atomico alla variabile globale, quindi può essere utilizzata per creare un semaforo per la comunicazione concorrente tra diversi Expert Advisors nello stesso terminale client.

 
fore-x:

GlobalVariableSetOnCondition() - potete spiegare in parole povere cosa fa questa funzione? La descrizione nella guida è molto confusa, non riesco a capire alcuni punti?

Imposta un nuovo valore ad una variabile globale esistente, se il valore corrente della variabile è uguale al terzo parametro di check_value. Se la variabile non esiste, la funzione genera un errore ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) e restituisce FALSE. La funzione restituirà TRUE se eseguita con successo, altrimenti restituirà FALSE. Per ottenere le informazioni sull'errore, deve essere chiamata la funzione GetLastError(). Se il valore corrente della variabile globale è diverso da check_value, la funzione restituisce FALSE.
Questa funzione permette l'accesso atomico alla variabile globale, quindi può essere utilizzata per creare un semaforo per la comunicazione concorrente tra diversi Expert Advisors nello stesso terminale client.

GlobalVariableSetOnCondition("Имя переменной", устанавливаемое значение, проверяемое значение);

Supponiamo che abbiate una variabile globale GL_Var.

Attualmente ha un valore di 1.0.

Dovete controllare se questa variabile ha un valore di 1.0 e, in caso affermativo, impostare questa variabile a 2.0

Sarà così:

GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0);

Per gestire i valori di ritorno di questa funzione, potete chiamarla tramite if

if (!GlobalVariableSetOnCondition(GL_Var, 2.0, 1.0)) {
   // здесь код обработки, если функция вернула false
   // false она вернёт в случае, если переменная GL_Var не была равна 1.0 во время вызова этой функции
   // или если вообще ещё нет глобальной переменной GL_Var
   }

Prima di chiamare questa funzione, potete controllare se la variabile globale GL_Var esiste, per evitare l'errore ERR_GLOBAL_VARIABLE_NOT_FOUND

 

Per favore, aiutatemi a risolvere un piccolo problema geometrico. C'è una linea con coordinate p1 e p2 (mostrata in rosso nell'immagine). Devo trovare la coordinata di p3, che è il 38,2% della coordinata di p2. Ho fatto quanto segue:

if(p2>p1) p3=p2-(p2-p1)*0,382; vero per la parte superiore della figura

if(p1>p2) p3= p2+(p1-p2)*0,382; vero per la parte inferiore della figura

C'è un modo per scrivere questo in un'equazione senza "se"?

 

Beh, scrivilo così.

p3=p2-(p2-p1)*0,382

 
Roger:

Beh, scrivilo così.

p3=p2-(p2-p1)*0,382


E infatti! Grazie per il vostro aiuto.
Motivazione: