Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 452

 
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?

È 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 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.
 
Non si può fare - non sono nel terminale
 

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

 
Forse c'è qualcosa nei miei indicatori che deve essere cambiato
 

Grazie, mi ha aiutato.

 
1mql:

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
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?
Già scritto.
 
alsu:

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);      // Закрытие Buy
         if (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?

Motivazione: