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

 

Forum sul trading, sistemi di trading automatico e test di strategia

Tutte le domande dei neofiti su MQL4 e MQL5, consigli e discussioni su algoritmi e codici

Dmitry Custurov, 2020.08.27 13:10

Saluti.

Ho la seguente cosa in MT4:

#import "user32.dll"
   int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   char buf[];
   StringToCharArray("MetaTrader4_Internal_Message", buf);
   int MT4InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print(MT4InternalMsg);
   bool res=SendMessageA((int)handle, MT4InternalMsg, 14, buf);
   Print("Функция SendMessageA завершила работу с результатом: ",res);
  }

Questo codice invia un comando alla finestra del terminale per avviare uno specifico EA.

Esiste una funzionalità simile per MT5?

Ho provato così:

#import "user32.dll"
   int SendMessageA(long hWnd, long Msg, uint wParam, uchar &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   uchar buf[];
   StringToCharArray("MetaTrader5_Internal_Message", buf);
   long MT5InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print("Window handle: ", handle);
   Print("Message: ",MT5InternalMsg);
   for(int i = 0; i<100; i++){
      bool res=SendMessageA(handle, MT5InternalMsg, i , buf);
      printf("Функция SendMessageA завершила работу с результатом: %d, номер: %d ",res, i);
   }
  }

Non funziona.

Ho provato a fare la scansione di spy++, ma non ci sono messaggi in MT5 a differenza di MT4.

Ho bisogno esattamente di aprire la finestra delle impostazioni di Expert Advisor.


Ho bisogno di essere in grado di eseguire lo script attraverso WinAPI. C'è una soluzione per il 5?

 
Ehi, ragazzi, aiutatemi! Non riesco a pensare a una funzione. L'Expert Advisor apre una posizione al giorno (tra le 00:00 e le 23:59), cioè un giorno, un ordine. Il compito è trovare la serie di perdite continue e visualizzarla nel log (usando il comando Print(), per stampare una volta sola). Il numero di elementi nella serie viene inserito dalla tastiera (per esempio, se avete inserito 5 dalla tastiera e la serie ha 4 giorni perdenti, allora la ignoriamo --> aspettiamo che si verifichino 5 o più giorni). Una serie è considerata se i giorni perdenti sono consecutivi o gli ordini sono chiusi in un giorno (sono aperti una volta al giorno, e gli ordini di mercato possono "appendere" più di un giorno). Per esempio, nel registro dovrebbero esserci le seguenti serie di perdite: 01.05, 02.05, 03.05, 04.05, 05.05. Condizione importante: riconoscere la serie (e di conseguenza emetterla nel log), che è maggiore o uguale al valore inserito dalla tastiera (extern).
//
Personalmente ho la seguente idea:
1. Fiya riempie l'array degli ordini perdenti con i loro valori di chiusura ( Mass[i] = OrderCloseTime();). Cioè, l'array memorizza solo le date e gli orari di chiusura degli ordini perdenti
2. Iniziamo a confrontare l'elemento alla posizione i e alla posizione i-1 (2 adiacenti)
2.1 li confrontiamo convertendo i dati della cella al giorno dell'anno ( TimeDayOfYear(Mass[i]) e TimeDayOfYear(Mass[i-1])
2.(Supponiamo che il primo giorno perdente = 178, e il precedente = 176 --> nessuna serie, perché non sono consecutivi, rispettivamente se il primo = 178, e il secondo 177 --> abbiamo una serie)
2.3 Con il ciclo for guardiamo attraverso tutte le celle dell'array e confrontiamo i suoi vicini. Se c'è una serie di perdite suelementivicinidell' array--> cominciamo a comprimere fino a 1.non abbiamo raggiunto ilnumerominimo richiesto di giorni perdenti per considerarla una serie. 2. (se il punto 1 è soddisfatto) PRIMA che la serie si fermi.
2.4 LA SERIE SI FERMA --> ricorda l'indice dell'elemento dell'array dove è finita e ricorda il numero di elementi della serie (la serie può essere == O maggiore del valore inserito dalla tastiera)
3. ----qui comincia il problema della realizzazione---
3.1 Dovremmo "fare un passo indietro" in qualche modo attraverso la serie di giorni persi, conoscendo la data di ogni elemento, tradurre la data da datetime --> stringa,
3.11 riempire la stringa (non so, forse attraverso StringAdd()?), e inviarla al file LOG (non milioni di volte, solo una)

L'algoritmo del consigliere non è importante, importante è la funzione utente stessa

Per Dio, aiuto!)
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
File:
 

Ciao.
Si richiedono consigli su un algoritmo.
Sto cercando di formare il seguente requisito prima di elaborare un blocco di ordini aperti:

Se ci sono già ordini di acquisto/vendita e il prezzo di apertura dell'ultimo ordine è inferiore di X punti al prezzo corrente, allora ignora gli ordini di blocco/non aperti.

Si prega di consigliare - quali sono le opzioni per l'implementazione nel codice?

 

Qualcuno ha misurato per mt 5 dal momento in cui un ordine viene inviato per aprire una posizione fino a quando effettivamente appare, quanto tempo può passare?

Mi interessa di più se viene inviato un ordine e viene consigliato un trade, dal momento in cui l'ordine viene inviato fino a quando i trade appaiono, quanto tempo può passare?

 
Сергей Таболин:

k = {1,2,4,8,16,......}

cn = k[c]

Soluzione divertente))))

 
Vladimir Baskakov:
MQ ha intenzione di aggiungere indicatori personalizzati alla piattaforma mobile?

A giudicare dalle risposte sul nuovo terminale mobile, non nel prossimo futuro. Solo penne.

 
Valeriy Yastremskiy:

Soluzione divertente))))

Beh, se i coefficienti sono noti in anticipo, perché calcolarli? )))

 
Сергей Таболин:

Beh, se i coefficienti sono noti in anticipo, perché calcolarli? )))

È più universale se li calcoli.

 

Colleghi, buona giornata a tutti - intuitivamente capisco la soluzione, vorrei sentire da voi.

Qual è il modo migliore per ripartire le parti del lotto per la loro successiva chiusura (chiusura parziale del lotto totale - in parti - 5 unità).

Nella mia comprensione, per esempio, il lotto 2.58. Divido per 5, il risultato è 0,51 lotto per chiudere 4 parti e la quinta parte è 0,54 lotto.

Qual è il modo migliore per rappresentare questo nel codice? Quale funzione matematica prende il resto della divisione per prendere 0,54 per chiudere?

 
Roman Shiredchenko:

Colleghi, buona giornata a tutti - intuitivamente capisco la soluzione, vorrei sentire da voi.

Qual è il modo migliore per assegnare le parti del lotto per la loro successiva chiusura (chiusura parziale del lotto totale - in parti - 5 unità di parti).

Nella mia comprensione, per esempio, il lotto 2.58. Divido per 5, il risultato è 0,51 lotto per chiudere 4 parti e la quinta parte è 0,54 lotto.

Qual è il modo migliore per rappresentare questo nel codice? Quale funzione prende il resto della divisione per prendere 0,54 per chiudere?

Che ne dite di leggere la documentazione?