Impulso - página 32

 
Artyom Trishkin:
Aquí pensé: probablemente su deseo de simplificar todo, para reducir a MA, y hacer rápido, y lleva a conclusiones precipitadas - "no va a funcionar". Te lo dije: primero cuenta la diferencia entre las garrapatas vecinas. Llenamos la matriz con las diferencias de precios, no con los precios. Pero buscamos de paso a MA. Corrección.

Cariño, hace tiempo que tengo esto arreglado. Te instruyo para que te asegures de no tener un indicador sin valor aquí.

Ahora, sobre lo que tienes al final:

- promedio de velocidad.

Aunque no hayas conseguido un MA en precio, has conseguido un MA en velocidad. ¿Qué diferencia hay?

Si no sabe lo que es el bicho de la media, fíjese bien:

(5+1)/2=3 //caídas

(1+5)/2=3 //aumenta

Bien, piensa por ti mismo, matemático...

 
new-rena:

Cariño, hace tiempo que tengo esto arreglado. Te instruyo para que no tengas un indicador sin valor aquí.

Ahora, sobre lo que tienes al final:

- promedio de velocidad.

Aunque no hayas conseguido un MA en precio, has conseguido un MA en velocidad. ¿Qué diferencia hay?

Si no sabe lo que es el bicho de la media, fíjese bien:

(5+1)/2=3

(1+5)/2=3 //aumenta

Bueno, piensa por ti mismo, matemático...

Eso es un poco de un bocado, amigo. Ser grosero no hace que la gente quede bien.

Ahora dime qué hay en tus fórmulas para qué, mentor ...

ZS. Entiendo su agresión - alguien no le dio sus cálculos, y usted mismo no entiende, contando todo en el mundo MAK, matemático ... Pero no hay que ir contra la gente por eso: pareces estúpido.

 
Artyom Trishkin:

Eso es un poco exagerado, amigo. Ser grosero no hace que la gente quede bien.

Ahora dime qué hay en tus fórmulas para qué, mentor...

ZS. Entiendo su agresión - alguien no le dio sus cálculos, y usted no entiende, considerando todo en el mundo como mashki, matemático ... No hay que chafardear a la gente por eso, pareces un estúpido.

La descortesía era mutua. Y el hecho de que alguien no haya dado algo, no afecta a la creación de lo que está pasando aquí. Donde lo pedí, ya lo expliqué y esa persona se anuncia en todos los foros, no sólo aquí. La gente escribe que está harto.

Ahora vamos al grano.

El enlace lo di ayer y es casi la parte principal del indicador, su cáscara, por así decirlo.

Es decir, se determina el número de ticks y la dirección del movimiento del precio para el mismo intervalo de tiempo y sobre su base se obtiene una señal de trading. ¿Qué es lo que no está claro aquí?

Lo principal es no hacer media.

Así, por la cantidad de ticks juzgamos sobre la volatilidad, y por la suma de delta para el mismo intervalo de tiempo (como usted escribió correctamente arriba, el delta es la diferencia de precios entre ticks sucesivos) juzgamos sobre la dirección del movimiento del precio, es decir, sobre la tendencia. Y el delta puede ser negativo o positivo. Sumamos lo que tenemos.

De hecho, para calcular este indicador y que funcione, sólo necesitamos y precisamos N número de últimos ticks. Escribir garrapatas en el historial no es realmente necesario, excepto para las pruebas.

Los análogos existentes de este indicador están diseñados como un velocímetro.

 
new-rena:

En cuanto a la descortesía, fue mutua. Y el hecho de que alguien no haya dado algo, no tiene ningún efecto en la creación de lo que está pasando aquí. Donde lo pedí, ya lo expliqué todo y ese hombre hace publicidad en todos los foros, no sólo aquí. La gente escribe que está harto.

Ahora vamos al grano.

Ayer publiqué el enlace aquí, así que esto es prácticamente la parte principal del indicador, su punto culminante, por así decirlo.

Es decir, se determina el número de ticks y la dirección del movimiento del precio para el mismo intervalo de tiempo y sobre su base se obtiene una señal de trading. ¿Qué es lo que no está claro aquí?

Lo principal es no hacer media.

Así, por la cantidad de ticks juzgamos sobre la volatilidad, y por la suma de delta para el mismo intervalo de tiempo (como usted escribió correctamente arriba, el delta es la diferencia de precios entre ticks sucesivos) juzgamos sobre la dirección del movimiento del precio, es decir, sobre la tendencia. Y el delta puede ser negativo o positivo. Sumamos lo que tenemos.

De hecho, para calcular este indicador y que funcione, sólo necesitamos y precisamos N número de últimos ticks. Escribir garrapatas en el historial no es realmente necesario, tal vez sólo para una prueba.

Los análogos existentes de dicho indicador tienen la forma de un velocímetro.

¿Es este enlace? https://www.mql5.com/ru/forum/61389/page30#comment_1776762

ZS. Sobre la descortesía recíproca: eres tú para nada. No fui grosero contigo primero.

Импульс
Импульс
  • www.mql5.com
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий. - Страница 30 - Категория: автоматические торговые системы
 
Artyom Trishkin:

¿Es este el enlace? https://www.mql5.com/ru/forum/61389/page30#comment_1776762

ZS. Te equivocas con lo de la grosería mutua. No fui grosero contigo primero.

Sí, pero eso es en 4 piezas. Por lo que tengo entendido lo haremos en 5.
 
Karputov Vladimir:

La base para registrar las garrapatas está ahí.


Formato del nombre del archivo:

Hay cuatro columnas en el archivo:


La cuestión sigue siendo la frecuencia con la que deben iniciarse los nuevos archivos. Creo que cada hora debes iniciar cada archivo. Será más fácil de analizar.

añadir High,Low (o contar inmediatamente los cambios de precio) - cuando se pierde un tick (por razones técnicas) cambian... es decir, es posible una situación cuando dentro de M1 Bid bajó, y High subió

Creo que ocurre durante los impulsos y cuando el terminal/ordenador está trabajando en otra cosa :-)

 
Karputov Vladimir:

Hubo un registro de 600 garrapatas. Este récord (100 cada uno) se repartió en seis cartas. Los gráficos muestran el precio y la tasa de cambio de los ticks (EMA10). En definitiva, hay una razón para estudiar las cifras:







en los gráficos tienes una especie de función de error de diferenciación. Es decir, primero se lee la velocidad como una derivada (dx/dt), luego se integra (por un método diferente) y se compara con la original.

pista: cualquier MA es una función integral de facto

pista2: para ver si se está moviendo en la dirección correcta - tome una SMA simple y muévala medio período hacia atrás. Si ves algo útil en el historial, significa que la velocidad y el impulso se cuentan por una razón y puedes profundizar

 
new-rena:
Sí, pero está escrito en 4 piezas. Por lo que tengo entendido lo haremos en 5.

Es indiferente la plataforma que se utilice. Le pregunté a Roman allí, y le escribí códigos en privado, pero nunca entendí por qué establece el tamaño del array a dos millones en init(), luego lo redimensiona a cero en start(), luego intenta llenarlo con el índice -1 (!!!), y sólo después de eso incrementa la variable SIZE en 1, que debería indexar el array. Compáralo con lo que he sugerido:

//+------------------------------------------------------------------+
//|                                                   FillArrays.mq4 |
//|              Copyright 2015, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|   Input variables                                                |
//+------------------------------------------------------------------+
input int NumberOfStorableTicks=20;       // Количество сохраняемых тиков
int numberOfStorableTicks; // Количество сохраняемых тиков
input int PeriodOfMA=5;                   // Период сглаживания
int periodOfMA; // Период сглаживания
input ENUM_MA_METHOD MaMethod=MODE_SMA;   // Метод усреднения МА

//+------------------------------------------------------------------+
//|   Global variables                                               |
//+------------------------------------------------------------------+
string symbol;    // Symbol()
int digits;       // Digits
//+------------------------------------------------------------------+
//|   Arrays                                                         |
//+------------------------------------------------------------------+
double      Mass_ticks[];
double      Mass_smoothed_values[];
//+------------------------------------------------------------------+
//|   Structures                                                     |
//+------------------------------------------------------------------+
   MqlTick struct_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   symbol=Symbol();
   digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   //---
   numberOfStorableTicks=(NumberOfStorableTicks<1)?1:NumberOfStorableTicks;
   periodOfMA=(PeriodOfMA<1)?1:PeriodOfMA;
   //---
   ArrayResize(Mass_ticks,numberOfStorableTicks);
   ArrayInitialize(Mass_ticks,0.0);
   ArrayResize(Mass_smoothed_values,numberOfStorableTicks);
   ArrayInitialize(Mass_smoothed_values,0.0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Comment("");
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(SymbolInfoTick(symbol,struct_tick)) {
      double tick_bid=struct_tick.bid;
      FillArrays(numberOfStorableTicks,tick_bid,Mass_ticks);
      }
   string txt="";
   for(int i=numberOfStorableTicks-1; i>=0; i--) {
      string itxt=IntegerToString(i);
      txt+="\nmass["+itxt+"]: "+DoubleToString(Mass_ticks[i],digits);
      }
   Comment(txt);
  }
//+------------------------------------------------------------------+
void FillArrays(int array_size, double price, double &mass_price[]) {
   //--- сместим данные в массиве влево
   for(int i=array_size-1; i>0; i--) {
      mass_price[i]=mass_price[i-1];
      }
   //--- запишем новый тик в массив
   mass_price[0]=price;
}
//+------------------------------------------------------------------+
void SmoothingDataArray(int array_size, int ma_period, int ma_shift, ENUM_MA_METHOD ma_method, double &mass_price[], double &mass_smoothing[]) {
   for(int i=array_size-1; i>=0; i--) {
      mass_smoothing[i]=iMAOnArray(mass_price,array_size,ma_period,ma_shift,ma_method,i);
      }
   }
//+------------------------------------------------------------------+

Sin embargo, iMAOnArray() se niega a suavizarlo. No importa lo retorcido que sea, es de ida y vuelta. Pero no es necesario para el propósito que se pretende aquí. Supongo que...

Sí, lo olvidé. Eso es lo que sugirió Roman:

//---------------------
extern int MaxDrawTicks=100;
extern int Num_Aver_of_Ticks=5;  
double     xBuffer_Time []; // Массив значений   динамический
                            // В котором индекс - номер тика, значение - это бид 
int SIZE=0;                 // Вспомогательная переменная для массива                                  
int tickCounter, tickCounter_Current; 
//+------------------------------------------------------------------+
int init()
  {   
//--- устанавливаем размер динамического массива
   if(ArrayResize(xBuffer_Time,2000000)<0) {Alert(" Ошибка в изменении размера массива времени поступления тиков "); return(false);}
//--- установим индексацию для буфера как в таймсерии для динамического массива
  // ArraySetAsSeries(xBuffer_Time,true);    
//---   Возвращает количество элементов указанного массива. 
   int S=ArraySize(xBuffer_Time);
   if (S>=0) Alert("Размер массива: ",S);
   else Print("Ошибка. Массив не создан ",S);        
   ArrayInitialize(xBuffer_Time, 0);
   return(0);
  }  
//+------------------------------------------------------------------+
int start()
  {  
   //ArrayResize(ValueArr,size);
   //ValueArr[size-1] = GetValue();
   //size++; 
 //----------------------------------------  
   ArrayResize(xBuffer_Time,SIZE);
   xBuffer_Time[SIZE-1] = Bid; //NormalizeDouble((iTime (_Symbol,1,0)-_start), 2); 
  
   if ( SIZE >= 0 && ArraySize(xBuffer_Time) < 2147483647)
      {
      Alert (" Значение xBuffer_Time[SIZE-1] = ", DoubleToStr(xBuffer_Time[SIZE-1],Digits) );
      Alert (" Значение SIZE = ", DoubleToStr(SIZE,2) );  
      } 
    SIZE ++;   
 //---------------------------------------      
//------------
   return(0);
  }
 
Artyom Trishkin:

Intentaré un retablo:

garrapata 10
garrapata 9
tick 8
garrapata 7
garrapata 6
garrapata 5
garrapata 4
garrapata 3 garrapata 2
garrapata 1 tick 0
Tictac futuro
X10
X9
X8
X7
X6
X5
X4
X3
X2
X1X0
XN0
X9X8
X7X6X5
X4X3
X2
X1
X0XN0
XN1

x0, x1, x2 definen el estado actual (rosa), el resto definen el estado pasado (verde claro). Los datos de la matriz se desplazan constantemente, y el nuevo xn0 que llega ocupa el lugar del cero. Así que ahora el estado actual se contará desde x1, x0, xn0, y el tick x2 de la última vez se desplaza a las celdas que definen el estado anterior, haciendo una pequeña corrección para ese estado. Si contamos todo junto, se corregirán las tres primeras marcas, lo que me parece bastante burdo.

Hay algo de esto. Aquí hay una captura de pantalla del gráfico de ticks:

Captura de pantalla de un gráfico de ticks

Obsérvese la zona delimitada por las grandes flechas.

Y aquí está el procesamiento de la condición cuando el incremento medio de los ticks (tick0, tick1, tick2) es mayor que el incremento medio (tick3, tick4, tick5, tick6, tick7, tick8, tick9, tick10) y el incremento es mayor que cero:

Tratamiento de la condición

 
Artyom Trishkin:

Es indiferente la plataforma que se utilice. Le pregunté a Roman allí, y le escribí códigos en privado, pero nunca entendí por qué establece el tamaño del array a dos millones en init(), luego lo redimensiona a cero en start(), luego intenta llenarlo con el índice -1 (!!!), y sólo después de eso incrementa la variable SIZE en 1, que debería indexar el array. Compara, esto es lo que sugerí:

Sin embargo, iMAOnArray() se niega a suavizarlo. Por mucho que lo retuerza, va hacia atrás y hacia delante. Pero no es necesario para los fines que se pretenden aquí. Supongo que...

DE ACUERDO. ¿Y dónde está el análisis del intervalo de tiempo en su código y por qué apareció MA?

Yo también he encontrado un fallo en lo mío. No es el mismo número de ticks durante un mismo intervalo de tiempo. No debemos perder este indicador.

Tal vez me equivoque, ya que todavía no he utilizado el 5-Rka durante mucho tiempo.

Razón de la queja: