El probador de eegia simplemente se detiene al ejecutar este código y no sabe por qué
El probador de eegia simplemente se detiene al ejecutar este código y no sabe por qué

 

Publi

Resultados 1 al 8 de 8

Tema: El probador de eegia simplemente se detiene al ejecutar este código y no sabe por qué

  1. #1
    Hola chicos,

    Tengo este código que escribí y en mi opinión funciona perfectamente, pero mi mente parece estar equivocada y no sabe por qué.
    Así que rastreé el problema hasta una parte específica, pero todavía no tengo idea de qué está causando su error.
    No hay errores de ninguna importancia tampoco.

    Aquí está la parte donde parece fallar en:
    Código insertado if (Trade # 91; 7, RowNumber2 # 93; == 1) {if (Ask lt; = Trade # 91; 2, RowNumber2 # 93; Trade # 91; 6, RowNumber # 93; == 0) { int Ticket = OrderSend (Symbol (), OP_SELL, Lots, Ask, Slippage, Oficios # 91; 4, RowNumber2 # 93 ;, 0, NULL, Oficios # 91; 1, RowNumber # 93 ;, 0, Blue); Oficios # 91; 6, RowNumber # 93; = 1;/Imprimir (--- MagicNumber =, MagicNumber, ---); ArrayCounter2 = 0; RowNumber2 = 0; }} else {ArrayCounter2 = ArrayCounter2 1; RowNumber2 = RowNumber2 1; }
    Aquí está el código completo:
    Código insertado/ --------------------------------------------- --------------------- /| FTB.mq4 |/| |/| https://www.mql4.com |/ ----------------------------------------------- ------------------- #property copyright #property strict extern int MagicNumber = 10001; extern double Lots = 0.1; extern double TrailingStop = 0; extern int Slippage = 3; extern double EntryGap = 0.00500; extern int BrokerDigits = 5; extern int AllowableDrawdown = 25; extern int MaxDrawdown = 610; extern bool MoneyManagement = falso; doble entrada; doble StopLoss; doble TakeProfit; double HalfCandleSize; doble medio; doble OpenCheck; doble CloseCheck; dobles Oficios # 91; 8 # 93; # 91; 20 # 93 ;;/ArrayNumber | MagicNumber | Entrada | Stoploss | WaitCounter | ExpirationTime | Entrado | Poblado int SignalTime; int BarsOnChart = Bars; int IsNewCandle; int OrderError = 0; int RowNumber = 0; int RowNumber2 = 0; int ArrayCounter = 0; int ArrayCounter2 = 0;/ ----------------------------------------------- ------------------- /| Función de inicialización experta |/ ----------------------------------------------- ------------------- int OnInit () {Oficios # 91; 0,0 # 93; = 1; Oficios # 91; 0,1 # 93; = 2; Oficios # 91; 0,2 # 93; = 3; Oficios # 91; 0,3 # 93; = 4; Oficios # 91; 0,4 # 93; = 5; Oficios # 91; 0,5 # 93; = 6; Oficios # 91; 0,6 # 93; = 7; Oficios # 91; 0,7 # 93; = 8; Oficios # 91; 0,8 # 93; = 9; Oficios # 91; 0,9 # 93; = 10; Oficios # 91; 0,10 # 93; = 11; Oficios # 91; 0,11 # 93; = 12; Oficios # 91; 0,12 # 93; = 13; Oficios # 91; 0,13 # 93; = 14; Oficios # 91; 0,14 # 93; = 15; Oficios # 91; 0,15 # 93; = 16; Oficios # 91; 0,16 # 93; = 17; Oficios # 91; 0,17 # 93; = 18; Oficios # 91; 0,18 # 93; = 19; Oficios # 91; 0,19 # 93; = 20; Impresión(-----------); Imprimir (ArrayNumber =, Oficios # 91; 0, RowNumber # 93;); Imprimir (MagicNumber =, Oficios # 91; 1, RowNumber # 93;); Imprimir (Entry =, Trades # 91; 2, RowNumber # 93;); Imprimir (Stoploss =, Oficios # 91; 3, RowNumber # 93;); Imprimir (WaitCounter =, Oficios # 91; 4, RowNumber # 93;); Imprimir (ExpirationTime =, Trades # 91; 5, RowNumber # 93;); Imprimir (Introducido =, Oficios # 91; 6, Número de Fila # 93;); Imprimir (Poblado =, Oficios # 91; 7, Número de Fila # 93;); Impresión(-----------); return (INIT_SUCCEEDED); }/ ---------------------------------------------- -------------------- /| Función de deinicialización experta |/ ----------------------------------------------- ------------------- void OnDeinit (const int reason) {}/ ------------------ ------------------------------------------------ /| Función de tick experto |/ ----------------------------------------------- ------------------- void OnTick () {if (BarsOnChart! = Bars)/Comprobación de nuevo cerradovelas {BarsOnChart = Bars; IsNewCandle = 1; } else {IsNewCandle = 0; } if (IsNewCandle == 1)/Comprobando si se ha cerrado una nueva vela {SignalTime = Hour () - 1; if ((SignalTime gt; 8) (SignalTime lt; 14) (Alto # 91; 1 # 93; gt; Alto # 91; 2 # 93;))/Verifica si la vela de señal tiene un valor más alto que la vela antes y dentro del marco de tiempo {HalfCandleSize = (Alto # 91; 1 # 93; - Bajo # 91; 1 # 93;)2;/Calcula la mitad del tamaño de la vela Middle = Low # 91; 1 # 93; HalfCandleSize;/Calcula el centro de la vela OpenCheck = Middle - Open # 91; 1 # 93 ;;/Calcula la distancia entre abierto y medio CloseCheck = Middle - Close # 91; 1 # 93 ;;/Calcula la distancia entre cerca y medio si (OpenCheck gt; 0 CloseCheck gt; 0)/comprueba si la vela se cierra en la mitad inferior {Entry = NormalizeDouble (Low # 91; 1 # 93; - 0.0001, 5);/La razón del error 130 de OrderSend es que la entrada de entrada está demasiado cerca de la entrada actual del mercado StopLoss = NormalizeDouble (High # 91; 1 # 93; 0.0005, 5); while (ArrayCounter lt; 20) {if (Oficios # 91; 7, RowNumber # 93; == 0) {Oficios # 91; 1, RowNumber # 93; = MagicNumber; Oficios # 91; 2, RowNumber # 93; = Entrada; Oficios # 91; 3, RowNumber # 93; = StopLoss; Oficios # 91; 4, RowNumber # 93; = 0; Oficios # 91; 5, RowNumber # 93; = 0; Oficios # 91; 6, RowNumber # 93; = 0; Oficios # 91; 7, RowNumber # 93; = 1; MagicNumber = MagicNumber 1; Impresión(-----------); Imprimir (ArrayNumber =, Oficios # 91; 0, RowNumber # 93;); Imprimir (MagicNumber =, Oficios # 91; 1, RowNumber # 93;); Imprimir (Entry =, Trades # 91; 2, RowNumber # 93;); Imprimir (Stoploss =, Oficios # 91; 3, RowNumber # 93;); Imprimir (WaitCounter =, Oficios # 91; 4, RowNumber # 93;); Imprimir (ExpirationTime =, Trades # 91; 5, RowNumber # 93;); Imprimir (Introducido =, Oficios # 91; 6, Número de Fila # 93;); Imprimir (Poblado =, Oficios # 91; 7, Número de Fila # 93;); Impresión(-----------); descanso; } else {ArrayCounter = ArrayCounter 1; RowNumber = RowNumber 1; }} ArrayCounter = 0; RowNumber = 0; }}} while (ArrayCounter2lt; 20) {if (Oficios # 91; 7, RowNumber2 # 93; == 1) {if (Ask lt; = Oficios # 91; 2, RowNumber2 # 93; Oficios # 91; 6, RowNumber # 93; == 0) {int Ticket = OrderSend (Symbol (), OP_SELL, Lots, Ask, Slippage, Trade # 91; 4, RowNumber2 # 93 ;, 0, NULL, Trade # 91; 1, RowNumber # 93 ;, 0, Blue); Oficios # 91; 6, RowNumber # 93; = 1;/Imprimir (--- MagicNumber =, MagicNumber, ---); ArrayCounter2 = 0; RowNumber2 = 0; }} else {ArrayCounter2 = ArrayCounter2 1; RowNumber2 = RowNumber2 1; }} if (ArrayCounter2 == 20) {ArrayCounter2 = 0; RowNumber2 = 0; }}

    Si ustedes pudieran darme su sabiduría que sería muy apreciada.
    ¡Gracias!

  2.                         
    Publicidad
  3. #2

    Cita Iniciado por ;
    {quote} Así que solo quería señalar algunas cosas que ayudarán a su código a seguir adelante. Podría ayudar a mirar algunas guías de estilo C y usar convenciones de desarrollo comunes. Tu código es muy difícil de leer porque no los sigues. Por ejemplo, hay un bloque de código completo que no está indentado, está usando CamelCase para nombres de variable cuando ese estilo normalmente solo se usa para clases, y también está usando enteros en lugar de tipos booleanos. Además, está utilizando matrices multidimensionales incorrectas. Solo necesita usarlos para ...
    Entiendo lo que dices. Soy bastante autodidacta jugando con el código y nunca tuve ningún tipo de clase o estructura adecuada mientras lo aprendía. Probablemente sería mejor buscar prácticas de codificación más convencionales. Ahora, independientemente de eso, todo funcionó y terminé encontrando el problema gracias a una pista que alguien me dio y encontré un ciclo infinito y lo resolví. ¡Gracias por la ayuda!

  4. #3

    Cita Iniciado por ;
    {quote} Hay un gran error con el código de prueba en un gráfico en vivo. Lleva tiempo ... mucho tiempo. No podría tener una señal para esto durante un mes o más, que no es viable en absoluto. Además, es una eegia que solo se comercializa durante ciertos momentos del día. Además de eso, si quiero hacer una prueba de respaldo, tendré que usar el probador de eegias de todos modos. Debe haber un problema en el código en alguna parte que no permita que continúe, pero parece que no puedo encontrarlo. Entiendo lo que dices sobre MT5, sin embargo, actualmente todo lo que ejecuto todavía está en MT4. Cambiar no es tan fácil como solo ...
    Así que solo quería señalar algunas cosas que ayudarán a su código a seguir adelante. Podría ayudar a mirar algunas guías de estilo C y usar convenciones de desarrollo comunes. Tu código es muy difícil de leer porque no los sigues. Por ejemplo, hay un bloque de código completo que no está indentado, está usando CamelCase para nombres de variable cuando ese estilo normalmente solo se usa para clases, y también está usando enteros en lugar de tipos booleanos. Además, está utilizando matrices multidimensionales incorrectas. Solo necesita usarlos para el álgebra lineal, todo lo demás necesita usar estructuras u objetos. Por ejemplo, tiene Inserted Code Trades # 91; 1, RowNumber # 93; = MagicNumber Esto es imposible de entender Los números mágicos son de tipo entero no doble

  5. #4

    Cita Iniciado por ;
    {quote} Si no has probado el código, ¿cómo sabes que realmente funciona? Lo verifica en gráficos en vivo y cuando veas las obras intente en el backtester. Deben ejecutarse códigos simples, pero si utiliza código complejo, su común no se ejecutará en el backtester sin grandes adaptaciones de código. De todos modos es una pérdida de tiempo probar algo en el backtester MT4. Si desea usar la prueba de respaldo debe ir a MT5. Ese backtester es capaz de ejecutar código como terminal sin ninguna modificación e incluso depurarlo
    Hay un gran error con el código de prueba en un gráfico en vivo. Lleva tiempo ... mucho tiempo. No podría tener una señal para esto durante un mes o más, que no es viable en absoluto. Además, es una eegia que solo se comercializa durante ciertos momentos del día. Además de eso, si quiero hacer una prueba de respaldo, tendré que usar el probador de eegias de todos modos. Debe haber un problema en el código en alguna parte que no permita que continúe, pero parece que no puedo encontrarlo. Entiendo lo que dices sobre MT5, sin embargo, actualmente todo lo que ejecuto todavía está en MT4. Cambiar no es tan fácil como simplemente descargarlo.
    Cita Iniciado por ;
    Lección para aprender: nunca omitas la directiva estricta. Quítelo, corrija su código y lo más probable es que haya solucionado el problema. Es malo, acabo de codificar un montón de python donde # es la forma de comentar una línea ... No creo que la matriz de sintaxis obsoleta [i, j] incluso compile con la directiva estricta. TIL.
    Jeje, todo está bien. Intenté eliminarlo y solo evita que aparezcan errores (como la conversión del tipo de datos que termina en una posible pérdida que no se verá en este código). Todavía el mismo problema sin embargo.

  6. #5
    Lección para aprender: nunca omitas la directiva estricta. Quítelo, corrija su código y lo más probable es que haya solucionado el problema. Es malo, acabo de codificar un montón de python donde # es la forma de comentar una línea ... No creo que la matriz de sintaxis obsoleta [i, j] incluso compile con la directiva estricta. TIL.

  7. #6

    Cita Iniciado por ;
    {quote} ¿Qué haría que esto fallara en el probador? No he probado esto en gráficos reales en vivo.
    Si no has probado el código, ¿cómo sabes que realmente funciona? Lo verifica en gráficos en vivo y cuando veas las obras intente en el backtester. Deben ejecutarse códigos simples, pero si utiliza código complejo, su común no se ejecutará en el backtester sin grandes adaptaciones de código. De todos modos es una pérdida de tiempo probar algo en el backtester MT4. Si desea usar la prueba de respaldo debe ir a MT5. Ese backtester es capaz de ejecutar código como terminal sin ninguna modificación e incluso depurarlo

  8. #7

    Cita Iniciado por ;
    {quote} Backtester no puede ejecutar código como terminal. Entonces es normal que un código funcione en la terminal falla en el backtester
    Sin embargo, ¿qué haría que esto fallara en el probador? No he probado esto en gráficos reales en vivo.

  9. #8

    Cita Iniciado por ;
    Hola chicos, tengo este código que escribí y, en mi opinión, funciona perfectamente, pero mi mente parece estar equivocada y no sabe por qué. Así que rastreé el problema hasta una parte específica, pero todavía no tengo idea de qué está causando su error. No hay errores de ninguna importancia tampoco. Aquí está la parte donde parece fallar en: if (Trades [7, RowNumber2] == 1) {if (Ask lt; = Trades [2, RowNumber2] Trades [6, RowNumber] == 0) {int Ticket = OrderSend (Symbol (), OP_SELL, Lots, Ask, Slippage, Trades [4, RowNumber2], 0, NULL, Trades [1, RowNumber], 0, Blue); Oficios [6, RowNumber] ...
    Backtester no puede ejecutar código como terminal. Entonces es normal que un código funcione en la terminal falla en el backtester

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Uso de cookies
Utilizamos cookies propias y de terceros para elaborar información estadística y mostrarle publicidad personalizada a través del análisis de su navegación. Si continúa navegando acepta su uso. Más información y política de cookies.
     

Aviso legal: Ni forosforex.com ni ninguna persona involucrada en forosforex.com aceptarán ninguna responsabilidad por cualquier pérdida o daño en el trading como resultado de la confianza en la información contenida en este sitio web, incluidos datos, cotizaciones, gráficos y señales de compra/venta. Por favor, infórmese plenamente de los riesgos y costes asociados a las operaciones en los mercados financieros, una de las formas de inversión que más riesgos entrañan.
forosforex.com le quiere recordar que los datos contenidos en este sitio web no son necesariamente en tiempo real ni exactos. forosforex.com no asume responsabilidad alguna por las pérdidas en que usted podría incurrir como resultado de la utilización de estos datos. Este acuerdo se rige por su versión en inglés, que prevalecerá siempre que haya alguna discrepancia entre la versión en inglés y la versión en español. Los CFD son un producto difícil de entender, varios organismos reguladores consideran que no es adecuado para inversores minoristas debido a su complejidad y riesgo.
Advertencia de riesgo: Los CFDs son un producto difícil de entender, y puede no ser adecuado para inversores minoristas debido a su complejidad y riesgo. Existe la posibilidad de sufrir una pérdida igual o superior a la inversión. Por lo tanto, no debe invertir o arriesgar dinero que no pueda permitirse perder. Debe asegurarse de que comprende todos los riesgos. Antes de abrir una cuenta en un broker por favor sea consciente e infórmese de los riesgos asociados con el trading. El contenido de este sitio web no debe interpretarse como asesoramiento personal. ForosForex recomienda que busque el consejo de un asesor financiero independiente.