Barra Cerrada contra Barra Vivo

From FxCodeBaseWiki
Jump to: navigation, search

La Problema

Probablemente observa, más las señales aplicadas a una partícula el marco de tiempo comprueba los condiciones del mercado y muestra los alertas sólo cuando la barra es completamente cerrada. Por ejemplo, cuando la señal es aplicado a 1-hora barras, la señal que aparece en el barra de 15:00 será mostrando en 16:00, en otros pruebas sólo cuando el barra de 15:00 tiene justo se ha cerrado. Esto debe mira bastante inconveniente porque esto parece ha es un hora retraso en la señal.

¿Correcto? Probablemente, sí. Pero justo intenta que de verdad ocurre en caso compruébanos los condiciones del mercado en un barra en directo, que es permanentemente cambiado cuando todos nuevo precio (aka tick) aparece. Hagamos crea un sencillo indicador que muestra un flecha en los barras para que el cierre precio de un barra es más alta que el cierre precio del previo barra.

function Init()
    indicator:name("Show bars where current close is higher than previous");
    indicator:description("");
    indicator:requiredSource(core.Bar);
    indicator:type(core.Indicator);

    indicator.parameters:addColor("clr", "Label Color", "", core.COLOR_LABEL);
end

local source;
local mark;
local first;

function Prepare()
    source = instance.source;
    local name = profile:id();
    instance:name(name);
    first = source:first() + 1;
    mark = instance:createTextOutput ("Mark", "Mark", "Wingdings", 10, core.H_Center, core.V_Top, instance.parameters.clr, 0);
end

function Update(period, mode)
    if period > first then
        if source.close[period] > source.close[period - 1] then
            mark:set(period, source.close[period], "\226");
        end
    end
end

En lugar aplica el indicador en la gráfica. Recomiendo escogiendo 1-minuto el marco de tiempo porque obtendrá el resultado que quiero mostrar usted en sólo unos pocos minutos. Cuando el indicador tiene justo ser aplicado, todos tienen buena pinta. Estos las barras que tiene cierre alto son marcado con un flecha. Pero, ahora deja el indicador para unos pocos minutos. Oops… Las señales que son extraño y falso aparecen. ¿Por qué? Decir la verdad, lo no fácil. El indicador es llamada todos tiempos un Nuevo precio llega. Tan un momento del llama, el precio que es más reciente es mostrando tan un cierre precio del reciente barra…. Así, aunque si finalmente el barra no coincidir con el condición del mercado, en del medio del marco de tiempo la barra puede coincide. Mira a la foto:

Closeandlivebar.png

(haga clic en la imagen verlo en completo tamaño)

Puede ver las señales de falso inmediatamente después dejemos el indicador aplicado en directo datos.

Así, hagamos ver. Mientras el indicador es aplicada en los datos de histórico, el función de actualiza es llamada sólo una vez, y obtiene el fin versión del barra. Pero para las barras, el indicador es llamado tan muchas veces como muchas ticks aparecido durante la barra. Si imagine como la barra mirado mientras la barra estuvo no terminado (mira tan el último señal de falso en el foto sobre) – verá que a veces la barra HIZO coincide la condición de la señal. Tan, en corto, para casi todos las señales y para muchos los indicadores, el indicador puede produce “ruido” – en otros pruebas, produce una señal de falso aunque si en el último versión tal las señales de ruido puede toma en los decisiones del mercado que es ilegal, tan, el mejor manera es esperar mientras la barra es completado y puede con certeza comprueba si el condición del señal se cumplo durante el barra o no.

¿Cómo Manejar Este Situación?

En Los Indicadores

La mejor manera es procesar la barra sólo en caso de que se cierra la barra. Para comprobar si la barra se terminó, puede comprobar un "número de serie" de la barra y procesar la última barra de historia viva sólo en caso de que sea totalmente terminada (no es el último ya). Vamos a cambiar el indicador por encima de esa manera.

function Init()
    indicator:name("Show bars where current close is higher than previous");
    indicator:description("");
    indicator:requiredSource(core.Bar);
    indicator:type(core.Indicator);

    indicator.parameters:addColor("clr", "Label Color", "", core.COLOR_LABEL);
end

local source;
local mark;
local first;

function Prepare()
    source = instance.source;
    local name = profile:id();
    instance:name(name);
    first = source:first() + 1;
    mark = instance:createTextOutput ("Mark", "Mark", "Wingdings", 10, core.H_Center, core.V_Top, instance.parameters.clr, 0);
end

local serial = nil;

function Update(period, mode)
    if period > first then
        if source:isAlive() and                                 -- if the history we applied to is alive
           period == source:size() - 1 then                     -- and this is the last value (live bar)
           if serial ~= source:serial(source:size() - 1) then   -- and the last bar is a new bar
                serial = source:serial(source:size() - 1);      -- remember a new last bar
                period = period - 1;                            -- and force to process the previous (e.g. the most
                                                                -- recently finished bar
            else
                return;                                         -- the bar is not changed, so
                                                                -- just do not process it
            end
        end
        if source.close[period] > source.close[period - 1] then
            mark:set(period, source.close[period], "\226");
        end
    end
end


¡Voilá, no más ruido!

En las Estrategias

Si usa la gestión de suscripción con el helper.lua, tiene nada hacer. El ayudante notifica sólo cuando una barra es completamente cerrada.

Si aplica el suscripción por te, justo va en el mismo manera tan para los indicadores – sólo no verifica condiciones del Mercado hasta el Nuevo barra aparece en el marco de tiempo suscribí.

Este Artículo en Otros Idiomas

Language: English  • español • français • русский • 中文 • 中文(繁體)‎