Errori, bug, domande - pagina 1521
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Allo stesso tempo, l'aiuto della funzione IsStopped dice che il funzionamento del programma viene terminato forzatamente dopo 3 secondi se c'è un comando per terminare il programma mql.
E se while(true) viene sostituito con while(!IsStopped()), l'indicatore si completa con successo quando viene rimosso dal grafico.
Tutto è chiaro. Abbiamo fatto un'indulgenza per la normale cancellazione.
Quando il terminale si chiude, sarà difficile. Non più di 3 secondi.
E non sono sicuro che lo scriveremo nella documentazione, 1. per non indulgere a scrivere indicatori così incauti (l'hai scritto per controllare?) 2. Come allentato, così stretto.
Una causa divertente dell'errore interno del compilatore (funzione utilizzata nell'indicatore):
...La cura è ovvia, ma sono d'accordo - glitch molto divertente. :)))
Ti ho scritto un messaggio privato.
Dmitri Custurov:
Здравствуйте. Не получается написать код, который открывал бы позицию через n-количество баров после открытия предыдущей позиции. Пробовал использовать Time[i], iBarShift, iTime. Все безуспешно. В программировании новичок. Поиск ничего не дал.
Ecco il codice:
se ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(Signal==1))Timer=Time[0];}
TimerNull=iBarShift(NULL,0,Timer,false);
se ((TimerNull>=n)&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, 0, NULL, 2, 0, Red);
z=2;}
Ho anche provato in questo modo:
Timer=Time[0];}
TimerNull=Time[0];
if ((TimerNull>=(Timer+2700))&&(z==1)) //come esempio qui, invece di n ho messo 2700 secondi, che nei test significava 3 candele da 15 minuti) {int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red);
z=2;}
E anche come questo:
Timer=Time[0];}
TimerNull=Time[0];
se ((CurrentTime()>=(Timer+2700))&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, 0, NULL, 2, 0, Red); //In questo caso quando ho rimosso 2700 il secondo trade è stato aperto subito dopo il primo nella stessa barra, ha senso. E anche quando ho messo un valore qualsiasi fino a 600 invece di 2700, il secondo affare è stato aperto nella stessa barra. Con un valore superiore a 600 il secondo trade non si è mai aperto. Non riesco a capire quale sia il problema. Vi sarei molto grato per il vostro aiuto.
I parametri Timer e TimerNull sono in formato datetime.
nel tuo esempio non c'è un'enumerazione di posizioni ad esempio
se ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(Signal==1))
quindi seleziona sempre la posizione 0.
Tutto ha un senso. Fatto un'indulgenza per la cancellazione normale.
Quando si chiude il terminale, sarà difficile. Non più di 3 secondi.
E non sono sicuro che lo scriveremo nella documentazione, 1. per non indulgere a scrivere indicatori così incauti (l'hai scritto per controllare?) 2. Come si è allentato, così si stringe.
Quindi, stringi un po', o aggiusta il riferimento. Assecondare non assecondare non è un discorso serio. Quello che i programmatori si aspettano da voi non è "coccolare", ma un software chiaro e ben documentato.
Naturalmente questo codice non ha altro scopo che una dimostrazione, che voi stessi avete chiesto. Ed è abbastanza innocuo, innocuo ottenerlo, se si rimuove Sleep e si sostituisce Comment con Print. Non c'è protezione contro lo spamming di gigabyte di stampe nel registro né in Quartet né in Quartet 5.
Ecco il codice:
se ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(Signal==1))Timer=Time[0];}
TimerNull=iBarShift(NULL,0,Timer,false);
se ((TimerNull>=n)&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, 0, NULL, 2, 0, Red);
z=2;}
Ho anche provato in questo modo:
Timer=Time[0];}
TimerNull=Time[0];
if ((TimerNull>=(Timer+2700))&&(z==1)) //come esempio qui ho messo 2700 secondi invece di n, che nei test significava 3 candele da 15 minuti) {int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red);
z=2;}
E anche come questo:
Timer=Time[0];}
TimerNull=Time[0];
se ((CurrentTime()>=(Timer+2700))&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, 0, NULL, 2, 0, Red); //In questo caso quando ho rimosso 2700 il secondo trade è stato aperto subito dopo il primo nella stessa barra, ha senso. E anche quando ho messo un valore qualsiasi fino a 600 invece di 2700, il secondo affare è stato aperto nella stessa barra. Con un valore superiore a 600 il secondo trade non si è mai aperto. Non riesco a capire quale sia il problema. Vi sarei molto grato per il vostro aiuto.
I parametri Timer e TimerNull sono in formato datetime.
Questa è una delle possibili implementazioni. Questo EA dovrebbe aprire un ordine dopo il numero di barre specificato. E imparare a inserire correttamente il codice EA, il pulsante SRC sulla barra dei messaggi.
111
La domanda è probabilmente per gli sviluppatori di siti web o gli amministratori di servizi freelance
---
Prima era: 568 lavori completati, 75% personale
Aggiunti 13 lavori (tutti personali) e diventato: completato 581, 75% personale
---
Quindi la domanda: decifrare per favore, cosa significa 75%?