Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1178

 
Aleksey Mavrin:

stiamo parlando del tester o dell'online?

Se online - guarda il codice, l'evento move non è instradato correttamente. Pannelli a proposito sul sito solo cinque librerie diverse, cosa vuoi dire?

E nel tester - sembra che non ci sia modo, e perché.

Dopo aver inviato i comandi di spostamento a TUTTI gli oggetti del pannello, eseguire ChartRedraw()
 
Aleksey Mavrin:

stiamo parlando del tester o dell'online?

Se online - guarda il codice, da qualche parte l'evento move non viene instradato normalmente. Pannelli a proposito sul sito solo cinque librerie diverse, cosa vuoi dire?

E nel tester - sembra che non ci sia modo, e perché.

Stiamo parlando di online. Non ne ho davvero bisogno nel tester. Non sono sicuro delle librerie - non sono un esperto di programmazione. Ho appena preso un codice pronto di pulsante da MQL5 Reference.

L'ho già fatto e sarà molto più economico. Apparentemente questo è il motivo per cui la posizione del pulsante viene aggiornata al prossimo tick. Non capisco come far muovere i pulsanti insieme allo sfondo.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Artyom Trishkin:
Dopo aver inviato i comandi di spostamento a TUTTI gli oggetti del pannello, eseguire ChartRedraw()
Ho provato così, ma non ha funzionato.
   ObjectSetInteger(0, "Buy",            OBJPROP_XDISTANCE, x + 2);
   ObjectSetInteger(0, "Buy",            OBJPROP_YDISTANCE, y + 2);
   ChartRedraw();
  
   ObjectSetInteger(0, "Sell",           OBJPROP_XDISTANCE, x + 74);
   ObjectSetInteger(0, "Sell",           OBJPROP_YDISTANCE, y + 2);
   ChartRedraw();
 
Per favore, aiutatemi a capire. Ho del codice per un pannello di trading per aprire un ordine pendente Buy Stop con successivo trailing se l'ordine non scatta. L'ordine viene aperto ma non viene modificato. Non ci sono errori nel giornale e non abbiamo visto nessun tentativo di modificare l'ordine. Ho provato a rintracciare attraverso il log in quale fase si verifica un errore utilizzando la funzione:
Print("Ордер Выбран!");

Basta inserirlo dopo ogni condizione if.

Come risultato, ho scoperto che la funzione:

 for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))  

Seleziona con successo l'ordine per procedere, ma sePrint("Order Selected!"); vieneinserito dopo questo codice:

if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOp
en())

allora si verifica un errore:

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Prezzo non valido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modifica #2 a 1,00000 (sl: 1,00000 tp: 1,00000) [prezzo non valido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modifica fallita! Risultato Retcode: 10015, descrizione del Retcode: prezzo non valido

Uso lo stesso codice in un altro EA per l'autotrading (l'unica differenza è l'assenza di tale codice):

ObjectGetInteger(0, "Buy Stop", OBJPROP_STATE) == true


) e non ho problemi. Gli ordini vengono aperti e modificati senza problemi.

Ecco il codice stesso:

     double Ask          = NormalizeDouble(PriceInformation_High_Buy[HighestCandle_High_Buy].high, _Digits) + indent; // максимум самой высокой свечи плюс отступ
     double sl_buy       = NormalizeDouble(PriceInformation_Low_Buy[LowestCandle_Low_Buy].low, _Digits) - indent;     // минимум самой низкой свечи минус отступ  
     double tp_buy       = Ask + ((Ask - sl_buy) * Профит_фактор);                                                    // количество стопов лоссов 
     
     if  (OrdersTotal()==0 && PositionsTotal()==0 &&                                         // проверка на наличие открытых позиций и ордеров
     ObjectGetInteger(0, "Buy Stop", OBJPROP_STATE) == true)                                 // проверка состояния кнопки
                                                                                             
     {
        atrade.BuyStop(Lots, Ask, _Symbol, sl_buy, tp_buy, ORDER_TIME_GTC, 0, "My comment"); // посылаем ордер Buy Stop
        ObjectSetInteger(0, "Buy Stop", OBJPROP_STATE, false);                               // отжимаем кнопку
     }

     else

     ObjectSetInteger(0, "Buy Stop", OBJPROP_STATE, false);                                  // отжимаем кнопку
       
//---Трейлинг Buy Stop---------------------------------------------------------------------------------------------------------------------------//     
      
        for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))                                                                      // выбираем ордер 
       
            if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen()) // проверяем символ, мэджик номер, цену
               
              {
                 if(aorder.OrderType()==ORDER_TYPE_BUY_STOP)
                 Print("Ордер Выбран!"); 
                 if(aorder.PriceCurrent()<aorder.PriceOpen())
                 
                    {
                     if(atrade.OrderModify(aorder.Ticket(),
                        asymbol.NormalizePrice(Ask),
                        asymbol.NormalizePrice(sl_buy),
                        asymbol.NormalizePrice(tp_buy),
                        aorder.TypeTime(),
                        aorder.TimeExpiration()))
                        Print("Модификация BUY STOP прошла успешно! Тикет ордера = ",atrade.ResultOrder());
                     else
                        Print("Модификация BUY STOP прошла с ошибкой! Result Retcode: ",atrade.ResultRetcode(),
                              ", description of Retcode: ",atrade.ResultRetcodeDescription());
                    }
              }

Per favore, ditemi qual è il mio errore?

 
Mikhail:

Si tratta di online. Non ne ho davvero bisogno nel tester. Non posso rispondere alla domanda sulle librerie, sono un totale idiota nella programmazione. Ho appena preso un codice pronto di pulsante da MQL5 Reference.

L'ho già fatto e sarà molto più economico. Apparentemente questo è il motivo per cui la posizione del pulsante viene aggiornata al prossimo tick. Non capisco come far muovere i pulsanti con lo sfondo.

E come hai fatto a determinare che è sul prossimo tick e non su quello?)

 
Mikhail:
Per favore, aiutatemi a capire. Avere un codice per il pannello di trading per aprire un ordine pendente Buy Stop con successivo trailing se l'ordine fallisce. L'ordine è aperto ma non c'è nessuna modifica dell'ordine, non ci sono errori nel giornale e non abbiamo nemmeno tentativi di modificare l'ordine. Ho provato a tracciare attraverso il log in quale fase si verifica un errore utilizzando la funzione:

Basta inserirlo dopo ogni condizione if.

Come risultato, ho scoperto che la funzione:

Seleziona con successo l'ordine per procedere, ma sePrint("Order Selected!"); vieneinserito dopo questo codice:

allora si verifica un errore:

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Prezzo non valido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modifica #2 a 1,00000 (sl: 1,00000 tp: 1,00000) [prezzo non valido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modifica fallita! Risultato Retcode: 10015, descrizione del Retcode: prezzo non valido

Uso lo stesso codice in un altro EA per l'autotrading (l'unica differenza è l'assenza di tale codice):


) e non ho problemi. Gli ordini vengono aperti e modificati senza problemi.

Ecco il codice stesso:

Potete dirmi per favore qual è il mio errore?

A quanto pare Normalize non funziona correttamente. Unprint asymbol.Digits() asymbol.TickSize(),. Punto() controllare .

 

Buona giornata a tutti. Affrontato questo problema quando si accede a EA a DLL:

Impossibile caricare 'C:....\shablon.dll' [487]

L'errore 487 sembra significareERROR_INVALID_ADDRESS ma il percorso della libreria è corretto. In realtà, ho già messo questa dll in tutte le cartelle, non aiuta.

Cosa può essere? Vi sarò grato per l'aiuto.


P.S. All'inizio questa dll era per 32 bit e funzionava in mt4*86. L'ho ricompilato per 64 bit, l'ho messo su mt5*64 ora e ho questi problemi.



 
Aleksey Mavrin:

Come fai a sapere cosa c'è nella prossima spunta e non in quella?)

Finché non arriva la nuova zecca, non c'è alcun movimento dei pulsanti. Questo è quello che posso vedere con i miei occhi. Non appena il prezzo cambia, i pulsanti si muovono.

Oggi, però, anche sul nuovo tick, i pulsanti hanno smesso di ridisegnarsi, anche se non ho cambiato nulla. Solo lo sfondo si muove.
 
Aleksey Mavrin:

A quanto pare Normalize non funziona correttamente. arrotonda a uno. Unprint asymbol.Digits() asymbol.TickSize(),. Punto() controllare .

Quando faccio una query come questa

Print("Symbol ", _Symbol, " Digits ", _Digits, " Point ", Point());

Ottengo questo risultato:

2020.06.17 13:49:53.270 2020.01.02 06:50:00 Simbolo EURUSD_i Cifre 5 Punto 1e-05

Quando faccio una richiesta come questa:

Print("Symbol ",aorder.Symbol(), " Digits ", asymbol.Digits(), " Point ", asymbol.TickSize());

Ottengo questo risultato:

2020.06.17 13:51:58.787 2020.01.02 06:45:00 Simbolo EURUSD_i Cifre 0 Punto 0,0

Allo stesso tempo voglio notare che se non inserisco la funzione Print, non ottengo nessun errore, l'ordine non cerca nemmeno di modificarsi. È come se CTrade non vedesse il mio ordine.

Il controllo del simbolo e del numero magico non funziona:

Print("Symbol ", asymbol.Name(), " Magic ", aorder.Magic(), " Ticket ", aorder.Ticket()); 

Risultato:

2020.06.17 14:37:38.147 2020.01.02 06:50:00 Symbol Magic 0 Ticket 2

Il numero magico dovrebbe essere 12345, il simbolo è euro dollaro.

Perché non posso avere simbolo e medgic?

Se cambiate la stringa:

aorder.Symbol()==asymbol.Name()

è cambiato in

aorder.Symbol()==_Symbol

e rimuovere la convalida per numero magico, allora abbiamo problemi con i prezzi

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [prezzo non valido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modifica #2 a 1,00000 (sl: 1,00000 tp: 1,00000) [prezzo non valido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modifica fallita! Risultato Retcode: 10015, descrizione del Retcode: prezzo non valido

Mi sono già scervellato, mentre questo stesso codice funziona bene in un altro Expert Advisor.

Cosa sto facendo di sbagliato?

Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Данные типа double выводятся с точностью до 16 десятичных цифр после точки, при этом данные могут выводиться либо в традиционном либо в научном формате – в зависимости от того, как запись будет наиболее компактна. Данные типа float выводятся с 5 десятичными цифрами после точки. Для вывода вещественных чисел с другой точностью либо в явно...
 
dozolov:

Buona giornata a tutti. Affrontato questo problema quando si accede a EA a DLL:

Impossibile caricare 'C:....\shablon.dll' [487]

L'errore 487 sembra significareERROR_INVALID_ADDRESS ma il percorso della libreria è corretto. In realtà, ho già messo questa dll in tutte le cartelle, non aiuta.

Cosa può essere? Vi sarò grato per l'aiuto.


P.S. All'inizio questa dll era per 32 bit e funzionava in mt4*86. L'ho ricompilato per 64 bit e ora lo metto su mt5*64 e ho questi problemi.



ERROR_INVALID_ADDRESS non riguarda il percorso. State passando gli argomenti sbagliati.