Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 801
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
Non capisco qual è il problema?
int start()
{
bool i;
int ticket;
double Pricem;
datetime Timen;
string Symb=Symbol();
ticket=OrderSend(Symb,OP_SELL,0.1,Bid,3,Ask+4*Point,Ask-12*Point);
i=OrderSelect(0,SELECT_BY_POS);
while(true)
{
RefreshRates();
Timen=OrderCloseTime();
if(Timen>0)
{
Pricem=OrderClosePrice();
Alert(Pricem);
Alert("ордер закрылся");
Sleep(30000);
}
Sleep(10);
}
return;
}
Sto risolvendo il compito di chiudere tutti i grafici aperti usando gli strumenti MQL4. Ci sono 3 grafici aperti con diverse coppie di valute e questo è il codice dello script:
Quando eseguo lo script, solo uno dei tre grafici viene chiuso ed ecco le stampe del log:
Significa che dopo la chiusura di un grafico il grafico corrente dovrebbe essere l'altro, ma:
1. Dopo che il primo grafico è chiuso, la funzioneChartIDrestituisce l'identificatore del grafico chiuso invece di quello corrente
2. Lafunzione ChartClose() in 2 e 3 iterazioni restituisce true, il che significa che chiude con successo la finestra già chiusa...
Chi sa dov'è il bug e come risolvere questo problema?
Non capisco qual è il problema?
Dovrebbe apparire un messaggio di chiusura. L'ordine si apre, arriva allo stop, si chiude e basta! Dov'è l'errore?
Penso che OrderSelect() dovrebbe essere dentro un ciclo while, e inoltre, il numero di posizione non sarà corretto, perché dopo la chiusura diventerà diverso - in questo caso è meglio selezionare dal ticket
Sto risolvendo il compito di chiudere tutti i grafici aperti usando gli strumenti MQL4. Ci sono 3 grafici aperti con diverse coppie di valute e questo è il codice dello script:
Quando eseguo lo script, solo uno dei tre grafici viene chiuso ed ecco le stampe del log:
Significa che dopo la chiusura di un grafico il grafico corrente dovrebbe essere l'altro, ma:
1. Dopo che il primo grafico è chiuso, la funzioneChartIDrestituisce l'identificatore del grafico chiuso invece di quello corrente
2. Lafunzione ChartClose() in 2 e 3 iterazioni restituisce true, il che significa che chiude con successo la finestra già chiusa...
Chi sa dov'è il bug e come risolvere questo problema?
pako, a volte funziona, a volte no, non so perché... genera un errore:
2014.12.11 17:52:12.456 Violazione di accesso letto a 0x09295000 in 'C:\.....................ex4'
Potrebbe essere perché sta cercando di chiudere il grafico su cui viene lanciato lo script?
PS funziona correttamente se lo script è collegato al primo grafico da sinistra. Ma se lo metto su qualsiasi altro grafico, ottengo un errore
pako, a volte funziona, a volte no, non so perché... genera un errore:
2014.12.11 17:52:12.456 Violazione di accesso letto a 0x09295000 in 'C:\.....................ex4'
Potrebbe essere perché sta cercando di chiudere il grafico su cui viene lanciato lo script?
PS funziona correttamente se lo script è collegato al primo grafico da sinistra. Ma se lo metto su qualsiasi altro grafico, ottengo un errore
Ragazzi, aiutatemi qui
Il problema è la seguente funzione per tradurre l'ordine in non-loss, non funziona correttamente quando la imposto sulle coppie Yen e permetto tutti gli ordini aperti in non-loss
Li lascio tutti ok, ma su cinque cifre torna a zero anche se lo imposto solo su cinque cifre ma la cosa migliore è che se lo imposto su cinque funziona bene
Qual è la ragione di questo lavoro? Cosa si deve tenere in conto in queste funzioni, in modo che l'esecuzione corretta sia corretta e non dipenda dal lavoro dell'esperto in quale finestra l'ho buttato tre o cinque cifre?
Grazie mille.
}
//==================================================================================================
// функция перевода ордеров стоп лоса в без убыток по всем открытым ордерам
//==================================================================================================
if(_Simbol==false)//если false то по всем ордерам открытым
{
for(int i=0;i<OrdersTotal();i++)//цикл перебора ордеров
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))//будем искать следующие
{
if(OrderType()==OP_BUY) //если тип бай
{
double bid=MarketInfo(OrderSymbol(),MODE_BID);//последний известный бид инструмента
double point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента
if(OrderStopLoss()<OrderOpenPrice())//если стоп лос меньше цены открытия
{
if(bid-Dist_Perivoda*point>OrderOpenPrice())//бид-профит*пункт больше цены открытия
{//модифицируем стоп лос
bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);
if(!ord_modifik)//если не получилось
Comment(GetLastError());//номер ошибки в угол
}
}
}
if(OrderType()==OP_SELL)//если тип селл
{
double ask=MarketInfo(OrderSymbol(),MODE_ASK);//последний известный аск инструмента
double point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента
if(OrderStopLoss()==0||OrderStopLoss()>OrderOpenPrice())//если стоп лос больше цены открытия или равен нолю
{
if(ask+Dist_Perivoda*point<OrderOpenPrice())//аск +профит*пункт меньше цены открытия
{//модифицируем стоп лос
bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);
if(!ord_modifik)//если не получилось
Comment(GetLastError());//номер ошибки в угол
}
}
}
}
}
}
Grazie per il codice, ho capito il succo, anche se a volte ottengo ancora un errore.
Sperimentato con funzioni che mostrano gli ID dei grafici. Cosa sia ChartFirst() dalla documentazione non è assolutamente chiaro, si può interpretare in qualsiasi modo - può significare il primo grafico aperto in ordine da sinistra, o il primo grafico aperto tra tutti quelli aperti (nel tempo), o il primo mai aperto nel terminale (la possibilità che sia aperto ora è quasi zero, quindi non ha senso chiuderlo). Sono più propenso a quest'ultima versione, perché non ho mai visto questa funzione restituire l'ID del grafico, che è aperto al momento.
Grazie per il codice, ho capito il succo, anche se a volte ottengo ancora un errore.
Sperimentato con funzioni che mostrano gli ID dei grafici. Cosa sia ChartFirst() dalla documentazione non è assolutamente chiaro, si può interpretare in qualsiasi modo - può significare il primo grafico aperto in ordine da sinistra, o il primo grafico aperto tra tutti quelli aperti (nel tempo), o il primo mai aperto nel terminale (la possibilità che sia aperto ora è quasi zero, quindi non ha senso chiuderlo). Sono più propenso a quest'ultima versione, perché non ho mai visto questa funzione restituire l'ID del grafico che è aperto al momento.
ChartFirst
Restituisce l'ID del grafico del primo grafico del terminale client.
Ho capito che questo è il grafico più a sinistra