Profitov: La domanda è sorta, è possibile scrivere un Expert Advisor o uno script, che sarebbe quello di raggiungere per esempio una perdita del 2% il giorno chiuderebbe tutte le transazioni?
Aiuto -- ho comprato un nuovo portatile con vin.8 installato -- ho scaricato il terminale da alpari ultimo aggiornato -- carico gli indicatori con cui ho lavorato prima, nella cartella MQL4-indicators, appaiono lì -- ma nel terminale stesso negli utenti non li vedono, il servizio clienti non dice nulla di diretto - cosa fare?
galinka: Aiuto -- ho comprato un nuovo portatile con vin.8 installato -- ho scaricato il terminale da alpari ultimo aggiornato -- carico gli indicatori con cui ho lavorato prima, nella cartella MQL4-indicators, appaiono lì -- ma nel terminale stesso negli utenti non li vedono, il supporto clienti non dice nulla di diretto - cosa fare?
Il menu di sistema "File" ha una nuova voce "Open Data Folder". È lì che devi metterlo ora.
Devo aver capito male cosa fare - file di programma - ho Alpari - apro ---- ci sono cartelle ---- MQL4- indikatori - li metto dentro - appaiono - chiudo - apro il terminale - non sono nei file utente
Chiude solo un paio di grafici dove la posizione è attivata. su altri si chiude un errore 4107. Ho provato a cambiare in extern bool Buy = false; //cancellare/chiudere la direzione degli ordini di acquisto
extern bool Sell = false; //delete/close sell order direction. in true . non ha funzionato. ma se per esempio lo mettiamo su un grafico senza posizioni aperte, non se ne chiude nessuna e si vede l'errore 4107.
Profitov: La domanda è sorta, è possibile scrivere un Expert Advisor o uno script, che sarebbe quello di raggiungere per esempio una perdita del 2% il giorno chiuderebbe tutte le transazioni?
Quindi, Ticket è ancora usato da qualche parte nella vecchia versione. Dobbiamo pulire il codice...
Fatto come segue:
Symb=Symbol(); // Название фин.инстр.
Total=0; // Количество ордеровint order[7];//буффер для семи ордеровint ord;//количество ордеровArrayInitialize(order,0);//обнуляем количество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symb)continue; // Не наш фин. инструмif (OrderType()>1){Alert("Обнаружен отложенный ордер. Эксперт не работает.");return;}
Total++; // Счётчик рыночн. ордif (Total>7){Alert("Более 7 ордеров. Эксперт не работает.");return;}
Ticket=OrderTicket(); // Номер выбранн. орд.
Tip =OrderType(); // Тип выбранного орд.order [OrderType()]++; // ПОЛУЧАЕМ КОЛИЧЕСТВО ОРДЕРОВ
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
ord=order [OrderType()];while(true) // Цикл закрытия орд.
{
if (Tip==0 && Cls_B==true) // Открыт ордер Buy..
{ //и есть критерий закрAlert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
RefreshRates(); // Обновление данных
Ans=OrderClose(Ticket,Lot,Bid,2); // Закрытие Buyif (Ans==true){Alert ("Закрыт ордер Buy ",Ticket);if (ord ==0){Alert ("Закрыты все ордера ",ord);break;}}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попыткаreturn; // Выход из start()
}
Le posizioni sono completamente chiuse. È vero che esce l'errore zero, ma le banchine dicono che significa nessun errore. E non riesco a trovare il messaggio"Tutti gli ordini chiusi" nel registro.
Ho messo in grassetto le righe che ho cambiato. Sembra funzionare, non ho ancora controllato a fondo.
Non capisco bene come funzionano i loop. Supponiamo che io abbia del codice sopra e sotto e nel mezzo del ciclo. Se le condizioni del ciclo coincidono, il codice viene eseguito solo all'interno del ciclo e non lascia che le linee di codice sotto il ciclo vengano eseguite? Considerando questo esempio, l'operatorebreak interrompe il ciclo? Permettendo l'esecuzione delle linee sottostanti, o il programma inizia a calcolare dall'inizio?
Correggetemi se sbaglio: break interrompe il ciclo in cui si trova, mentrecontinue esegue la valutazione dell'operatore sopra di esso, quindi non è chiaro se c'è un secondo operatore - la sua valutazione sarà interrotta ocontinue interrompe tutto il codice e manda il programma a eseguirlo per primo?
La domanda è sorta, è possibile scrivere un Expert Advisor o uno script, che sarebbe quello di raggiungere per esempio una perdita del 2% il giorno chiuderebbe tutte le transazioni?
È possibile.
Aiuto -- ho comprato un nuovo portatile con vin.8 installato -- ho scaricato il terminale da alpari ultimo aggiornato -- carico gli indicatori con cui ho lavorato prima, nella cartella MQL4-indicators, appaiono lì -- ma nel terminale stesso negli utenti non li vedono, il supporto clienti non dice nulla di diretto - cosa fare?
Devo aver capito male cosa fare - file di programma - ho Alpari - apro ---- ci sono cartelle ---- MQL4- indikatori - li metto dentro - appaiono - chiudo - apro il terminale - non sono nei file utente
Grazie, mi ha aiutato.
Sotto l'ultima esterna:
extern int slippage = 2; // slippage dei prezzi quando si chiudono le posizioni di mercato
inserirne un'altra:
extern bool total_symb = true; // su tutte le coppie
e su ogni linea:
if ((OrderSymbol() == Symbol())
e
if(OrderSymbol() == Symbol())
sostituire questo:
if(OrderSymbol() == Symbol() || total_symb)
in teoria dovrebbe funzionare, controllare.
Chiude solo un paio di grafici dove la posizione è attivata. su altri si chiude un errore 4107. Ho provato a cambiare in extern bool Buy = false; //cancellare/chiudere la direzione degli ordini di acquisto
La domanda è sorta, è possibile scrivere un Expert Advisor o uno script, che sarebbe quello di raggiungere per esempio una perdita del 2% il giorno chiuderebbe tutte le transazioni?
Quindi, Ticket è ancora usato da qualche parte nella vecchia versione. Dobbiamo pulire il codice...
Fatto come segue:
Le posizioni sono completamente chiuse. È vero che esce l'errore zero, ma le banchine dicono che significa nessun errore. E non riesco a trovare il messaggio"Tutti gli ordini chiusi" nel registro.
Ho messo in grassetto le righe che ho cambiato. Sembra funzionare, non ho ancora controllato a fondo.
Non capisco bene come funzionano i loop. Supponiamo che io abbia del codice sopra e sotto e nel mezzo del ciclo. Se le condizioni del ciclo coincidono, il codice viene eseguito solo all'interno del ciclo e non lascia che le linee di codice sotto il ciclo vengano eseguite? Considerando questo esempio, l'operatorebreak interrompe il ciclo? Permettendo l'esecuzione delle linee sottostanti, o il programma inizia a calcolare dall'inizio?
Correggetemi se sbaglio: break interrompe il ciclo in cui si trova, mentrecontinue esegue la valutazione dell'operatore sopra di esso, quindi non è chiaro se c'è un secondo operatore - la sua valutazione sarà interrotta ocontinue interrompe tutto il codice e manda il programma a eseguirlo per primo?