[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 113
A volte ci sono calcoli complessi o il caricamento della storia in init(), o ci sono un sacco di indicatori e Expert Advisors appesi al terminale o...
ma se il terminale interrompe il codice durante la sua inizializzazione, il seguente errore apparirà nel log: ".... timeout in esperto ...."
Se il log non mostra alcun errore nel terminale, significa che l'inizializzazione ha avuto successo. La funzione start() stessa è facile da controllare - scrivere nella prima linea start(): Print("new tick");
Ho fatto così(((.
int start()
{
Print("start");
/*current_values_from_MT(CUR, CUR_BUF);
current_values_from_MT(MAIN, MAIN_BUF);*/return(0);
}
Sì, dondolando un sacco di informazioni, anche i calcoli, sperimentando con le zecche...
Il calcolo dura 2 - 3 minuti, MT "non si blocca", tutto funziona tipicamente, i messaggi di Print() e Alert vengono visualizzati e poi tutto))
Guardando tutti i messaggi di MT, non ho trovato alcun errore...
Il calcolo dura 2 - 3 minuti, MT non si "blocca", tutto funziona tipicamente, vengono visualizzati i messaggi Print() e Alert e poi tutto))
se Print() viene stampato, start() funziona sicuramente, ma sono confuso dalla tua affermazione che il calcolo richiede 2-3 minuti - con un tale carico sul terminale è necessario interrompere i calcoli usando la funzione sleep() altrimenti il terminale si blocca definitivamente.
Poiché MT4 non ha un debugger, inserite Print() nelle sezioni di codice discutibili e catturate le sezioni di codice e le condizioni che hanno fallito o non hanno fallito.
Come posso controllare se un ordine è attivato da TakeProfit o StopLoss? Grazie per la vostra risposta!
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по стопу. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, osl;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
osl=NormalizeDouble(OrderStopLoss(), dg);
if (ocp==osl) return(True);
}
return(False);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по тейку. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
Familiarizzate con il codice di entrambe le funzioni e fondetele in una sola per ottimizzare la velocità di esecuzione e per i vostri compiti specifici...
eddy: Sayod,su quale timeframe hai fatto trading e con quali parametri?
Qual è la differenza o hai invertito e vuoi testarlo?
Commercializzato su h1 per impostazione predefinita,
Pip passo - 30
LotExpo - 1.59
Penso che i parametri non abbiano troppa importanza se l'idea è stata implementata, penso che l'Expert Advisor andrà bene con qualsiasi parametro, IMHO.
Jaguar1974: Ho bisogno di impegnare il fatto che gli ordini aperti si attivino con TakeProfit o StopLoss. Non mi interessano i valori reali di TakeProfit e StopLoss.
Se vuoi solo registrare il fatto che l'ordine è scattato, allora puoi memorizzare il numero di ordini sul tick precedente e confrontarlo con il numero di ordini sul tick successivo - se il numero di ordini è cambiato, significa ....
kiimar: Il terminale ha chiuso l'ordine perdente con il commento "so:19.5%/28.4/145.8". Cosa significa questo?
Significa che quando il livello di margine libero del 19,5% è stato raggiunto, si è verificato uno stopout e il trade perdente è stato chiuso secondo le regole.
se Print() stampa, allora sicuramente hai start() funzionante, ma sono confuso dalla tua affermazione che il calcolo richiede 2-3 minuti - a un tale carico del terminale è necessario interrompere i calcoli utilizzando la funzione sleep(), altrimenti il terminale si bloccherà definitivamente
Poiché MT4 non ha un debugger, inserite Print() nelle sezioni di codice dubbie e catturate le sezioni di codice e le condizioni che hanno fallito o non hanno fallito.
Scusa, ho sbagliato, Print funziona solo in init. Non riesco a entrare in start))
Sì, alla fine di ogni funzione, ho messo la stampa con un messaggio su di essa, per controllare se tutto è ok. E tutti i messaggi (tutte le funzioni) hanno funzionato al 100% fino alla fine dell'init, non posso andare all'inizio!
artmedia70: Familiarizzate con il codice di entrambe le funzioni e fondetele in una sola per ottimizzare la velocità di esecuzione e per i vostri compiti specifici...
Scusa, mi sono espresso male, Print funziona solo in inite. Non riesco a entrare in start))
Sì, alla fine di ogni funzione, inserisco una stampa con un messaggio su di essa per controllare se tutto è ok. E tutti i messaggi (tutte le funzioni) hanno funzionato al 100% fino alla fine dell'init, non posso andare ad iniziare!
Grazie in anticipo per la risposta!
Quindi francamente non hai una zecca nel terminale. Cioè o non è connesso, o stai lavorando su un grafico offline, o controllaIsExpertEnabled() nell'init e se non è permesso, allora abilita gli EA.
A volte ci sono calcoli complessi o il caricamento della storia in init(), o ci sono un sacco di indicatori e Expert Advisors appesi al terminale o...
ma se il terminale interrompe il codice durante la sua inizializzazione, il seguente errore apparirà nel log: ".... timeout in esperto ...."
Se il log non mostra alcun errore nel terminale, significa che l'inizializzazione ha avuto successo. La funzione start() stessa è facile da controllare - scrivere nella prima linea start(): Print("new tick");
Ho fatto così(((.
Sì, dondolando un sacco di informazioni, anche i calcoli, sperimentando con le zecche...
Il calcolo dura 2 - 3 minuti, MT "non si blocca", tutto funziona tipicamente, i messaggi di Print() e Alert vengono visualizzati e poi tutto))
Guardando tutti i messaggi di MT, non ho trovato alcun errore...
Si prega di assistere.
Il calcolo dura 2 - 3 minuti, MT non si "blocca", tutto funziona tipicamente, vengono visualizzati i messaggi Print() e Alert e poi tutto))
se Print() viene stampato, start() funziona sicuramente, ma sono confuso dalla tua affermazione che il calcolo richiede 2-3 minuti - con un tale carico sul terminale è necessario interrompere i calcoli usando la funzione sleep() altrimenti il terminale si blocca definitivamente.
Poiché MT4 non ha un debugger, inserite Print() nelle sezioni di codice discutibili e catturate le sezioni di codice e le condizioni che hanno fallito o non hanno fallito.
Come posso controllare se un ordine è attivato da TakeProfit o StopLoss? Grazie per la vostra risposta!
Sayod ,su quale timeframe hai fatto trading e con quali parametri?
Qual è la differenza o hai invertito e vuoi testarlo?
Commercializzato su h1 per impostazione predefinita,
Pip passo - 30
LotExpo - 1.59
Penso che i parametri non abbiano troppa importanza se l'idea è stata implementata, penso che l'Expert Advisor andrà bene con qualsiasi parametro, IMHO.
Ho bisogno di impegnare il fatto che gli ordini aperti si attivino con TakeProfit o StopLoss. Non mi interessano i valori reali di TakeProfit e StopLoss.
Se vuoi solo registrare il fatto che l'ordine è scattato, allora puoi memorizzare il numero di ordini sul tick precedente e confrontarlo con il numero di ordini sul tick successivo - se il numero di ordini è cambiato, significa ....
Il terminale ha chiuso l'ordine perdente con il commento "so:19.5%/28.4/145.8". Cosa significa questo?
se Print() stampa, allora sicuramente hai start() funzionante, ma sono confuso dalla tua affermazione che il calcolo richiede 2-3 minuti - a un tale carico del terminale è necessario interrompere i calcoli utilizzando la funzione sleep(), altrimenti il terminale si bloccherà definitivamente
Poiché MT4 non ha un debugger, inserite Print() nelle sezioni di codice dubbie e catturate le sezioni di codice e le condizioni che hanno fallito o non hanno fallito.
Scusa, ho sbagliato, Print funziona solo in init. Non riesco a entrare in start))
Sì, alla fine di ogni funzione, ho messo la stampa con un messaggio su di essa, per controllare se tutto è ok. E tutti i messaggi (tutte le funzioni) hanno funzionato al 100% fino alla fine dell'init, non posso andare all'inizio!
Grazie in anticipo per la risposta!
Familiarizzate con il codice di entrambe le funzioni e fondetele in una sola per ottimizzare la velocità di esecuzione e per i vostri compiti specifici...
Scusa, mi sono espresso male, Print funziona solo in inite. Non riesco a entrare in start))
Sì, alla fine di ogni funzione, inserisco una stampa con un messaggio su di essa per controllare se tutto è ok. E tutti i messaggi (tutte le funzioni) hanno funzionato al 100% fino alla fine dell'init, non posso andare ad iniziare!
Grazie in anticipo per la risposta!
Quindi francamente non hai una zecca nel terminale. Cioè o non è connesso, o stai lavorando su un grafico offline, o controlla IsExpertEnabled() nell'init e se non è permesso, allora abilita gli EA.