Asesor multidivisa. Preferiblemente la opinión de los promotores. - página 3

 
Reshetov:
LeoV:
YuraZ escribió (a): Para ser honesto y no es realmente agradable ... digamos que la garrapata no ha llegado para estos pares y se perderá de nuevo

Si mostraras un trozo de código que genera la entrada, podrías encontrar el error lógico más rápidamente

Pero debería haber una solución comúnmente aceptada en MQL, ¿no? ¿Cómo "sincronizar" la apertura de barras para diferentes símbolos? Bueno, aparentemente, debemos esperar a que se abra una nueva barra para todos los símbolos que se utilizan. Pero, ¿cómo hacerlo correctamente?

No hay necesidad de sincronicidades y otros inventos de la bicicleta. Todo está ya inventado desde hace mucho tiempo. La presencia de una nueva barra formada se comprueba sólo para ese instrumento, en el que el Asesor Experto está instalado a la llegada del primer tick. Y el evento start() también se dispara sólo en ese símbolo a la llegada de un nuevo tick. Te he dado un trozo de código que realiza esta comprobación para que la siguiente posición, en caso de recotizaciones, no se abra en la siguiente barra y tras un fallo se intente abrir en la misma barra. A mí me funciona bien tanto en modo monodivisa como multidivisa. La operación en caso de recotizaciones se abre en la misma barra, pero con cierto retraso, y por tanto no siempre al precio de apertura de la barra, sino con cierto desplazamiento. Es decir, habrá diferencias con el probador, pero no en barras, sino en el precio de apertura.


Yuri, el comienzo de una nueva hora ocurrirá aunque la garrapata no haya llegado.

Empezaremos una nueva hora aunque la garrapata no haya llegado.


es posible calcular una nueva barra por un tick en una nueva barra de CUALQUIER instrumento


LeoV espera un nuevo tick de forma sincrónica para todos los pares utilizados

 
YuraZ:
El núcleo:

YuraZ escribió (a):

francamente y no es precisamente bonito... Si la garrapata no llegó para estos pares y se perderá de nuevo

Si la garrapata no llegó, no puede colocar una orden inmediatamente, a menos que utilice un script,

Y sólo si las garrapatas llegan a las empresas de corretaje y no las transmiten a su terminal (de día).

Por eso, cuando implementaba un Asesor Experto multidivisa, hacía una Máquina de Estado de Miles (o Moore),

que supervisó los estados abiertos de la orden para los pares necesarios. Por supuesto, no siempre fue posible

Naturalmente, no siempre era posible abrir al precio correcto, pero este enfoque garantizaba que las órdenes se abrieran EXACTAMENTE.

fácil ! es posible hacer un pedido :-) si la garrapata no vino

¡Piénsalo! Si no lo haces, te daré una pista.

Por lo general, con los EAs multidivisa la situación es tal que si no se garantiza al 100% la llegada de la orden

entonces la lógica del trabajo del asesor será destruida.

Por cierto, no olvide que su EA está trabajando en los ticks del par que está rondando,

por lo que, aunque hubiera un tick en otro par, y no hubiera un tick en el par con su EA adjunto,

entonces la sincronización se romperá.

No se olvide de cosas tan desagradables como la pérdida de conexión con las empresas de corretaje y las recotizaciones (si se trata de una cuenta real).

Por cierto, en los microrreales suelo tener situaciones en las que nunca se pasa una orden hasta que se recarga el terminal.

Incluso en modo manual. Están esperando algo, esperando...

Por eso hace tiempo que renuncié a los sistemas basados en órdenes de pares.

Es demasiado problemático.

 
thecore:
YuraZ:
el núcleo:

YuraZ escribió (a):

francamente y no es precisamente bonito... Si la garrapata no llegó para estos pares y se perderá de nuevo

Si la garrapata no llegó, no puede colocar una orden inmediatamente, a menos que utilice un script,

Y sólo si las garrapatas llegan a las empresas de corretaje y no las transmiten a su terminal (de día).

Por eso, cuando implementaba un Asesor Experto multidivisa, hacía una Máquina de Estado de Miles (o Moore),

que supervisó los estados abiertos de la orden para los pares necesarios. Por supuesto, no siempre fue posible

Naturalmente, no siempre pude abrir al precio necesario, pero este enfoque garantizaba que las órdenes se abrieran SIEMPRE.

fácil ! es posible hacer un pedido :-) si la garrapata no vino

¡Piénsalo! Si no lo haces, te daré una pista.

Por lo general, con los EAs multidivisa la situación es tal que si no se garantiza al 100% la llegada de la orden

entonces la lógica del trabajo del asesor será destruida.

Por cierto, no olvide que su EA está trabajando en los ticks del par que está rondando,

por lo que, aunque hubiera un tick en otro par, y no hubiera un tick en el par con su EA adjunto,

entonces la sincronización se romperá.

Y no olvide cosas tan desagradables como la pérdida de conexión con las empresas de corretaje y las recotizaciones (si se trata de una cuenta real).

Por cierto, en los microrreales suelo tener situaciones en las que nunca se pasa una orden hasta que se recarga el terminal.

Incluso en modo manual. Están esperando algo, esperando...

Por eso hace tiempo que renuncié a los sistemas basados en órdenes de pares.

Dolorosamente molesto.

Probablemente querías escribir TIC... pero usted acaba de escribir orden.


Usted entiende que un EA puede entrar en el EURUSD y utilizar el USDCHF.

Sólo escribe

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...



Un trozo de código que funciona

OpenLevel = MarketInfo( sSymbol, MODE_BID );
si ( TDARELOCK == 0 )
ticket=OrderSend( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,sComment,mMagic,0,Red);


----

Y el TIC para el USDCHF puede no ser suficiente para conseguir un tick para cualquier par.


Espero que MQL5 no necesite recibir ticks para que el programa funcione

prometieron hacer eventos, lo que significa que cualquier pieza de código puede ser activada por un evento

----



la segunda pregunta relativa a la congelación en el terminal - este problema puede ser resuelto por el reinicio - esto es más probable que los desarrolladores.

Yo también he visto esto

esto también se puede arreglar y hay un ejemplo aquí en el foro

Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули
#include <winuser32.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import
 
//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться
//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда
//возможно нужно будет делать задержку в пару секунд
//У меня все работает
int Reconnect()
{
int result;
int hwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика
hwnd = GetParent(hwnd); // получаем хендл родительского окна
hwnd = GetParent(hwnd); // ...
hwnd = GetParent(hwnd); //добираемся до главного окна
result = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщене
return;
}

---

así que si envías una orden pero no se abre, puedes enviar este trozo de código para que funcione

 

YuraZ писал (а):

Normalmente con los EAs multidivisa suele ocurrir que si no hay garantía de que entre una orden al 100%,

Probablemente querías escribir TIC... pero usted escribió orden.

Me refería a hacer un pedido al 100%.

 
thecore:

YuraZ escribió (a):

Normalmente con los EAs multidivisa suele ocurrir que si no hay garantía de que entre una orden al 100%,

Probablemente querías escribir TIC... Debe haber querido decir TIC

Me refería a hacer un pedido del 100%.


Pero entiendes que esto no es sólo en un sistema multidivisa

No tienes una garantía del 100% en un Asesor Experto ordinario... nunca una garantía del 100%

porque hay factores

INTERNET

SU PROVEEDOR

SU PROVEEDOR DE CC

su hardware

Equipo de CC

etc.

---

para eso están las paradas... o un ordenador de repuesto con un proveedor diferente (si el problema está en su lado)

---


pero si es un error en la lógica del programa!!! entonces es otra cosa y se trata

---


y la lógica no debe caer porque la entrada no fue a las 15:00 sino a las 15:05 o 15:02

esto es exactamente lo que vemos con el autor del hilo! él está tratando de entrar en 15:00:00:00

( los números son arbitrarios)


no está haciendo pips así que entrar a las 15:00 o 15:01 - 15:07 no debería ser demasiado problema para él


Eso es lo que estoy diciendo: no se puede estar estrictamente atado al principio de una barra para todos los símbolos necesarios - es suficiente para obtener el principio de una barra en cualquiera de ellos

 
YuraZ:
el núcleo:
YuraZ:
el núcleo:

YuraZ escribió (a):

francamente y no es precisamente bonito... Si la garrapata no llegó para estos pares y se perderá de nuevo

Si la garrapata no llegó, no puede colocar una orden de inmediato a menos que utilice un script,

Y sólo si las garrapatas llegan a las empresas de corretaje y no las transmiten a su terminal (de día).

Por eso, cuando implementaba un Asesor Experto multidivisa, hacía una Máquina de Estado de Miles (o Moore),

que supervisó los estados abiertos de la orden para los pares necesarios. Por supuesto, no siempre fue posible

Naturalmente, no siempre pude abrir al precio necesario, pero este enfoque garantizaba que las órdenes se abrieran SIEMPRE.

fácil ! es posible hacer un pedido :-) si la garrapata no vino

¡Piénsalo! Si no lo haces, te daré una pista.

Por lo general, con los EAs multidivisa la situación es tal que si no se garantiza al 100% la llegada de la orden

entonces la lógica del trabajo del asesor será destruida.

Por cierto, no olvide que su EA está trabajando en los ticks del par que está rondando,

por lo que, aunque hubiera un tick en otro par, y no hubiera un tick en el par con su EA adjunto,

entonces la sincronización se romperá.

No se olvide de cosas tan desagradables como la pérdida de conexión con las empresas de corretaje y las recotizaciones (si se trata de una cuenta real).

Por cierto, en los microrreales suelo tener situaciones en las que nunca se pasa una orden hasta que se recarga el terminal.

Incluso en modo manual. Están esperando algo, esperando...

Por eso hace tiempo que renuncié a los sistemas basados en órdenes de pares.

Es demasiado problemático.

Probablemente querías escribir TIC... pero usted acaba de escribir orden.

Si su Asesor Experto está parado en el EURUSD, entiende que puede entrar por el USDCHF.

es suficiente con escribir

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

Un trozo de código que funciona

OpenLevel = MarketInfo( sSymbol, MODE_BID ); if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,0,sComment,mMagic,0,Red);

----

el TIC para el USDCHF puede no ser suficiente para conseguir un tick para cualquier par

Espero que en MQL5 no sea necesario recibir ticks para que el programa funcione

prometen hacer eventos, lo que significa que cualquier pieza de código puede ser escrita sobre un evento

----

la segunda pregunta relativa a la congelación en el terminal - este problema se puede resolver reiniciando - esto es más probable que se dirija a los desarrolladores.

Yo también he visto esto -

esto también se trata y hay un ejemplo aquí en el foro

Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ
4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули
#include <winuser32.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import

//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться
//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда
//возможно нужно будет делать задержку в пару секунд
//У меня все работает
int Reconnect()
{
int result;
int hwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика
hwnd = GetParent(hwnd); // получаем хендл родительского окна
hwnd = GetParent(hwnd); // ...
hwnd = GetParent(hwnd); //добираемся до главного окна
result = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщене
return;
}

---

así que si envías una orden pero no se abre puedes, por supuesto, enviar un trozo de código similar para que funcione

Reiniciar el terminal está muy bien, pero qué hay que hacer con otros Asesores Expertos en este momento que están colgados en otras ventanas

y su lógica de funcionamiento es naturalmente diferente y no reacciona bien a la recarga frecuente porque los valores de las variables se pierden,

que hemos estado acumulando durante tanto tiempo.

Aunque el Asesor Experto se basa en el EURUSD, se da cuenta de que puede entrar por el USDCHF

Basta con escribir

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

Por supuesto que sí. En un EA multidivisa es exactamente así como se controlan los otros pares.

Pero si en el par principal el último tick de la hora anterior llegó, por ejemplo, a las 7.50, y el primer tick de la hora llegó,

a las 8.10, y en el símbolo secundario el primer tick de la hora llegó a las 8.00,

entonces es difícil esperar que el EA que se cierne sobre el par de divisas mayor coloque una orden sobre el menor

a las 8.00, como mucho a las 8.10.

El caso de que el EA funcione como un guión, es decir, que no le dé tregua al sistema, sólo se agita y se agita,

No lo considero a pesar de las garrapatas. Es mejor escribir un guión.

 
thecore:
YuraZ:
el núcleo:
YuraZ:
el núcleo:

YuraZ escribió (a):

francamente y no es precisamente bonito... Si la garrapata no llegó para estos pares y se perderá de nuevo

Si la garrapata no llegó, no puede colocar una orden inmediatamente, a menos que utilice un script,

Y sólo si las garrapatas llegan a las empresas de corretaje y no las transmiten a su terminal (de día).

Por eso, cuando implementaba un Asesor Experto multidivisa, hacía una Máquina de Estado de Miles (o Moore),

que supervisó los estados abiertos de la orden para los pares necesarios. Por supuesto, no siempre fue posible

Naturalmente, no siempre pude abrir al precio necesario, pero este enfoque garantizaba que las órdenes se abrieran SIEMPRE.

fácil ! es posible hacer un pedido :-) si la garrapata no vino

¡Piénsalo! Si no lo haces, te daré una pista.

Por lo general, con los EAs multidivisa la situación es tal que si no se garantiza al 100% la llegada de la orden

entonces la lógica del trabajo del asesor será destruida.

Por cierto, no olvide que su EA está trabajando en los ticks del par que está rondando,

por lo que, aunque hubiera un tick en otro par, y no hubiera un tick en el par con su EA adjunto,

entonces la sincronización se romperá.

No se olvide de cosas tan desagradables como la pérdida de conexión con las empresas de corretaje y las recotizaciones (si se trata de una cuenta real).

Por cierto, en los microrreales suelo tener situaciones en las que nunca se pasa una orden hasta que se recarga el terminal.

Incluso en modo manual. Están esperando algo, esperando...

Por eso hace tiempo que renuncié a los sistemas basados en órdenes de pares.

Es demasiado problemático.

Probablemente querías escribir TIC... pero usted acaba de escribir orden.

Si su Asesor Experto está parado en el EURUSD, entiende que puede entrar por el USDCHF.

es suficiente con escribir

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

Pedazo de código que funciona

OpenLevel = MarketInfo( sSymbol, MODE_BID ); if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,0,sComment,mMagic,0,Red);

----

el TIC para el USDCHF puede no ser suficiente para conseguir un tick para cualquier par

Espero que en MQL5 no sea necesario recibir ticks para que el programa funcione

prometen hacer eventos, lo que significa que cualquier pieza de código puede ser escrita sobre un evento

----

la segunda pregunta relativa a la congelación en el terminal - este problema se puede resolver reiniciando - esto es más probable que se dirija a los desarrolladores.

Yo también he visto esto -

esto también se trata y hay un ejemplo aquí en el foro

Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули
#include <winuser32.mqh>
#import "user32.dll"
int GetParent(int hWnd);
#import
 
//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться
//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда
//возможно нужно будет делать задержку в пару секунд
//У меня все работает
int Reconnect()
{
int result;
int hwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика
hwnd = GetParent(hwnd); // получаем хендл родительского окна
hwnd = GetParent(hwnd); // ...
hwnd = GetParent(hwnd); //добираемся до главного окна
result = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщене
return;
}

---

así que si envías una orden pero no se abre puedes, por supuesto, enviar un trozo de código similar para que funcione

Reiniciar el terminal está muy bien, pero qué hay que hacer con otros Asesores Expertos en este momento que están colgados en otras ventanas

y su lógica de funcionamiento es naturalmente diferente y no reacciona bien a la recarga frecuente porque los valores de las variables se pierden,

que hemos estado acumulando durante tanto tiempo.

Aunque el Asesor Experto se basa en el EURUSD, se da cuenta de que puede entrar por el USDCHF

Basta con escribir

LevelOpenBUY = MarketInfo("USDCHF",MODE_ASK);

... = OrderSend ("USDCHF",Lot, LevelOpenBUY, ...

Por supuesto que sí. En un EA multidivisa es exactamente así como se controlan los otros pares.

Pero si en el par principal el último tick de la hora anterior llegó, por ejemplo, a las 7.50, y el primer tick de la hora llegó,

a las 8.10, y en el símbolo secundario el primer tick de la hora llegó a las 8.00,

entonces es difícil esperar que el asesor en el par de divisas mayor coloque una orden en el menor

a las 8.00, como mucho a las 8.10.

El caso de que el EA funcione como un guión, es decir, que no le dé tregua al sistema, sólo se agita y se agita,

No lo considero a pesar de las garrapatas. Sería mejor escribir un guión.



1 y crees que Reconnect llama a la función Init () ? y reinicia el EA ?


Te equivocas...


Además, es prudente guardar variables calculadas y valiosas


si no tengo código complejo lo almaceno en VARIABLE GLOBAL

si el código es complejo lo escribo en el disco y lo leo al reiniciar - si el reinicio fue por error simplemente lo restauro

por cierto es fácil determinar si fue o no por error




---

2 Si hay una nueva o'clock para algún par de divisas - sin tick para otros pares - entonces no importa cuando hay un tick

Un NUEVO BAR - o más exactamente una nueva hora puede considerarse que ha llegado.


y, por tanto, es posible contar los pares retrasados por CLOSE pensando que están cubiertos también


los ticks vendrán más tarde y la barra se desplazará en el tiempo !!! pero la Hora real ha pasado

---


está bien colocar una orden en un par de divisas sin un tick - ya sabes cómo

no digo que se exponga a las 8:00 - ( cifra convencional )


puede establecerse tan pronto como llegue un NUEVO TICK a una nueva barra en cualquier par de divisas


---


>o si el último tick de la hora anterior en el par principal llegó, por ejemplo, a las 7.50, y el primer tick de la hora llegó

>a las 8.10, y en un par secundario el primer tick de la hora llegó a las 8.00,

>Es difícil esperar que un EA que se cierne sobre el par de divisas principal coloque una orden en un par de divisas secundario

>a las 8.00, o como mucho a las 8.10.


trabajando en el modo multidivisa, no es necesario contar el tiempo del par principal o no el principal

sólo tienes que coger un tick del inicio de una nueva barra en cualquier par de divisas - y calcular los indicadores por CIERRE, no por cierre de barra

y dentro - fuera.


¡porque la entrada será en el tick de una nueva barra de cualquier par controlado porque será una señal para una nueva hora! (en este caso una nueva hora)





 
YuraZ:

si trabajas en multidivisa, no necesitas cronometrar la barra principal o no la barra principal

sólo tienes que coger un tick de un nuevo inicio de barra - y calcular los indicadores por CIERRE, y no por cierre de barra

y en - fuera


¡porque la entrada será precisamente en el tick de una nueva barra de cualquier par controlado porque será una señal para una nueva hora! (en este caso una nueva hora)

Más como esto.......

 
LeoV:
YuraZ:

no hay que cronometrar el par de divisas principal o no

necesita atrapar el tick de una nueva barra para cualquier par de divisas - y calcular los indicadores por CIERRE y no por cierre de barra

y en - fuera


¡porque la entrada será precisamente en el tick de una nueva barra de cualquier par controlado porque será una señal para una nueva hora! (en este caso una nueva hora)

Más como esto.......

Rehaga el Asesor Experto según esta lógica, y la probabilidad del PROBLEMA se reducirá muchas veces

si añade la captura de una nueva hora en TODOS los pares que están en una ventana de revisión del mercado especialmente en yenes entonces prácticamente no debería tener fallos


1 ¡¡¡Sólo no cojas la nueva barra en sincronía en todos los pares!!!

2 Atrapar NUEVA BARRA en cualquiera de los pares CONTROLADOS, iniciar el recálculo de todos los pares requeridos en el CIERRE actual ...

( por cierto, es posible que tenga que rehacer algunos de SUS indicadores )


decidir si entrar - salir - o seguir aguantando

 
YuraZ:

Reelaborar el Asesor Experto por esta lógica, y la probabilidad de un problema se reducirá a veces

si añade la captura de una nueva hora en TODOS los pares que están en la ventana de visión general del mercado, especialmente en yenes, entonces prácticamente no debería tener fallos

¡¡¡1 solo no captan una nueva barra en sincronía en todos los pares !!!

2 Atrapa una NUEVA BARRA en cualquiera de los pares CONTROLADOS, inicia el recálculo de todos los pares necesarios en el CIERRE actual...

( por cierto algunos de SUS indicadores pueden necesitar ser recalculados )

y tomar la decisión de entrar -salir- o seguir aguantando

Gracias veri Macha)))))))))))))

Razón de la queja: