Símbolos personalizados. Errores, fallos, preguntas, sugerencias. - página 2

 
fxsaber:
Los símbolos personalizados en el real son sólo para información, no para negociación. Sólo pueden utilizarse para comerciar en el probador.

Lossímbolos personalizados en real pueden utilizarse como indicador de apertura o cierre en instrumentos reales.

 
Aidas Geguzis:

Los símbolos personalizados pueden utilizarse como indicador de apertura o cierre en instrumentos reales.

Tú yfxsaber :gracias, y ni una palabra al respecto en la documentación. El motivo, como siempre, es que la información debe recogerse en el foro y de boca en boca. He pensado que han implementado algún tipo de trading de pares o de n-herramientas mediante el terminal y también he pensado en cómo tratan la multiplicidad de lotes. Ahora veo que probablemente sea inútil para mí.

 

Bug 05.

Bug CustomTicksAdd.

template <typename T>
T MyPrint( const T Value, const string Str, const bool DebugFlag = false ) { Print(Str + " = " + (string)Value); return(Value); }
#define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + (string)__LINE__ + ": " + #A)                    // Макрос для удобного и наглядного вывода значений

void OnStart()
{
  const string Name = "TEMP9";                                                                      // Имя кастомного символа
  const string SymbOrig = "EURUSD";                                                                 // Имя оригинального символа

  MqlTick Ticks[];
  const int Size = _P(CopyTicksRange(SymbOrig, Ticks, COPY_TICKS_ALL, (long)D'2019.01.01' * 1000)); // Считали EURUSD-тики за 2019 год.
    
  if ((Size > 0) && _P(CustomSymbolCreate(Name, NULL, SymbOrig)) && _P(SymbolSelect(Name, true)))   // Создали символ на основе EURUSD.
  {            
    _P(CustomTicksAdd(Name, Ticks));                                                                // Поместили в него историю EURUSD через CustomTicksAdd
  
    MqlTick AddTicks[1];
    AddTicks[0] = Ticks[Size - 1];                                                                  // Взяли последний тик
       
    AddTicks[0].time += 3600;                                                                       // И к его времени добавили час
    AddTicks[0].time_msc = (long)AddTicks[0].time * 1000;                                           
    
    _P(CustomTicksDelete(Name, (ulong)D'2019.02.01 00:00' * 1000, LONG_MAX));                       // Удалили все тики, оставив только данные за январь 2019.
    _P(CopyTicksRange(Name, Ticks));                                                                // Посмотрели, сколько тиков осталось.
    
    _P(CustomTicksAdd(Name, AddTicks));                                                             // Пробросили один тик.
    
    _P(CopyTicksRange(Name, Ticks));                                                                // Увидели, что добавился не один тик, а 129.
    _P(CustomTicksDelete(Name, (ulong)D'2019.02.01 00:00' * 1000, LONG_MAX));                       // Делаем повторное удаление - да, 129!

    _P(SymbolSelect(Name, false));                                                                  // Удалили символ из Обзора рынка.
    _P(CustomSymbolDelete(Name));                                                                   // Удалили символ.         
  }
}


Resultado

void OnStart(), Line = 11: CopyTicksRange(SymbOrig,Ticks,COPY_TICKS_ALL,(long)D'2019.01.01'*1000) = 3316638
void OnStart(), Line = 13: CustomSymbolCreate(Name,NULL,SymbOrig) = true
void OnStart(), Line = 13: SymbolSelect(Name,true) = true
void OnStart(), Line = 15: CustomTicksAdd(Name,Ticks) = 3316638
void OnStart(), Line = 23: CustomTicksDelete(Name,(ulong)D'2019.02.01 00:00'*1000,LONG_MAX) = 1158959
void OnStart(), Line = 24: CopyTicksRange(Name,Ticks) = 2157552
void OnStart(), Line = 26: CustomTicksAdd(Name,AddTicks) = 1
void OnStart(), Line = 28: CopyTicksRange(Name,Ticks) = 2157681
void OnStart(), Line = 29: CustomTicksDelete(Name,(ulong)D'2019.02.01 00:00'*1000,LONG_MAX) = 129
void OnStart(), Line = 31: SymbolSelect(Name,false) = true
void OnStart(), Line = 32: CustomSymbolDelete(Name) = true


Se añaden más ticks de los especificados.

 

Algo de los sintéticos se está comiendo la memoria y ralentiza el arranque del terminal. Ayer hice dos sintéticos, abrí un gráfico para cada uno de ellos. Hoy el terminal ha arrancado tres minutos(!!!), el consumo de RAM por parte del Administrador de Tareas ha sido de 1,88 Gb. He eliminado estos gráficos, he ocultado los sintéticos, el arranque es de 20 segundos como antes, el consumo de RAM es de 490 MB. Bild 2006, Máximo de barras en la ventana - Ilimitado.

En el primer sintético tenía fórmula de ayuda:

1

En el segundo una fórmula sencilla:

0,5 * (ask(EURUSD) + ask(USDCAD))

Запуск платформы - Для продвинутых пользователей - MetaTrader 5
Запуск платформы - Для продвинутых пользователей - MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Alexey Volchanskiy:

Algo de los sintéticos se está comiendo la memoria y ralentiza el arranque del terminal. Ayer hice dos sintéticos, abrí un gráfico para cada uno de ellos. Hoy el terminal ha arrancado tres minutos(!!!), el consumo de RAM por parte del Administrador de Tareas ha sido de 1,88 Gb. Eliminados estos gráficos, ocultados los sintéticos, arranque 20 seg. como antes, consumo de RAM 490 Mb. Bild 2006, Máximo de barras en la ventana - Ilimitado.

En el primer sintético tenía fórmula de ayuda:

En el segundo una fórmula sencilla:

0,5 * (ask(EURUSD) + ask(USDCAD))

Cuando se ejecuta de forma sintética, consume muchos recursos del disco SSD. Si el disco SSD es lento, el inicio del terminal puede tardar 10 minutos si hay varios sintéticos.

Ni siquiera hablo de usar el HDD para el terminal con los sintéticos.

Cuando he instalado la unidad rápida (Samsung 970 Pro) todos los problemas con el inicio del terminal y las síntesis se detuvieron.

La memoria RAM es de unos 12 Gb cuando se inicia el terminal, se utiliza el procesador i7-6700K.

 
fxsaber:

Bug 05.

Bug CustomTicksAdd.

Se añaden más ticks de los especificados.

En 2007, la situación empeoró aún más. CustomTicksAdd añade 63969 ticks en lugar de uno.

void OnStart(), Line = 24: CopyTicksRange(Name,Ticks) = 2157552
void OnStart(), Line = 26: CustomTicksAdd(Name,AddTicks) = 1
void OnStart(), Line = 28: CopyTicksRange(Name,Ticks) = 2221521
void OnStart(), Line = 29: CustomTicksDelete(Name,(ulong)D'2019.02.01 00:00'*1000,LONG_MAX) = 63969


SZY 2007 - todos los errores son reales.

 
fxsaber:

Bug 02.

Incluso ChartRedraw no da un efecto visual.

Sólo si se desplaza el gráfico con el ratón, vuelve a la normalidad. ¿Podría arreglar la visualización por ChartRedraw?

Recomiendo una forma de refrescar el gráfico después de CustomRatesUpdate para que dibuje forzosamente las barras actualizadas, y no sólo cuando él mismo lo decida.

 
Por alguna razón, un símbolo personalizado puede ser eliminado de la Observación del Mercado incluso cuando su gráfico está abierto.
 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Nueva versión de MetaTrader 5 build 2007: Calendario Económico, Servicios MQL5 y API para R

fxsaber, 2019.02.22 12:40

¿Es correcto que después de RatesUpdate en OnCalculate se ponga siempre a cero prev_calculated?

Después de todo, si actualizo una barra nueva, por ejemplo, no necesito recalcular todo el indicador.

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Nueva versión de MetaTrader 5 build 2007: Calendario Económico, Servicios MQL5 y API para R

fxsaber, 2019.02.22 12:14

Una gran petición, si no hay ningún símbolo, pero hay sus archivos tkc, elimínelos.

Ante una situación que anormalmente la Terminal se estrelló.

Entro y veo que mi símbolo no está. Sólo hay que crear un símbolo con el mismo nombre y mostrarlo con el historial de tkc. Parece un error.