Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 745
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Es posible ocultar todas las bandas de nivel de reversión en el indicador, no probadas y el resto, y dejar solo las probadas, es decir, ocultar extern bool zone_show_weak = true; y debajo en el código si (zone_strength[i] == ZONE_WEAK && zone_show_weak == false) y otros no se pueden ocultar. Tal vez alguien entienda y corrija el código o elimine los niveles que describí anteriormente. Código indicador:
#property derechos de autor "Copyright © 2017 Andrew Sumner"
#enlace de propiedad ""
#propiedad indicador_gráfico_ventana
#indicador de propiedades_amortiguadores 4
#indicador de propiedad_color1 Rojo
#indicador de propiedad_color2 Rojo
#indicador de propiedad_color3 DodgerBlue
#indicador de propiedad_color4 DodgerBlue
externo interno BackLimit = 300; //Atras, atras
marco de tiempo externo interno = 0;
cadena externa TimeString = "0=Actual, 60=H1, 240=H4, 1440=Día, 10080=Semana, 43200=Mes";
color externo color_support_weak = MediumAquamarine; // soporte - soporte para DarkSlateGray débil
color externo color_support_untested = SeaGreen; // desmarcado
color externo color_support_verified = Verde;
color externo color_support_proven = LimeGreen;
color externo color_support_turncoat = verde oliva;
color externo color_resist_weak = Siena;
color externo color_resist_untested = Orquídea;
color externo color_resist_verified = Carmesí;
color externo color_resist_proven = Rojo;
color externo color_resist_turncoat = naranja oscuro;
bool externo zone_show_weak = verdadero;
externo doble zone_fuzzfactor = 0.2;
booleano externo zone_solid = falso; // verdadero si es falso, no habrá zonas de banda completa, sino enmarcadas por un rectángulo con ancho ancho
externo int zone_linewidth = 2;
externo int zone_style = 0;
externo bool zone_show_info = verdadero;
externo int zone_label_shift = 22; // desplazamiento horizontal de las etiquetas, pero solo después de eliminar el indicador
booleano externo zone_show_alerts = falso;
booleano externo zone_alert_popups = verdadero;
externo bool zone_alert_sounds = verdadero;
externo bool enviar_email = falso;
externo int zone_alert_waitseconds = 300;
bool externo zone_merge = verdadero;
bool externo zone_extend = verdadero;
extern bool fractals_show = false;
externo doble fractal_fast_factor = 3.0;
externo doble fractal_slow_factor = 6.0;
bool externo SetGlobals = verdadero;
doble FastDnPts[], FastUpPts[];
double SlowDnPts[], SlowUpPts[];
doble zone_hi[1000], zone_lo[1000];
int zone_start[1000], zone_hits[1000], zone_type[1000], zone_strength[1000], zone_count = 0;
boolzone_turn[1000];
#define ZONE_SUPPORT 1
#define ZONE_RESIST 2
#define ZONE_WEAK 0
#define ZONE_TURNCOAT 1
#define ZONE_UNTESTED 2
#define ZONE_VERIFICADO 3
#define ZONE_PROVEN 4
#define UP_POINT 1
#define DN_POINT -1
int time_offset = 0;
int inicial()
{
Indicadores de búfer (4);
SetIndexBuffer(0, SlowDnPts);
SetIndexBuffer(1, SlowUpPts);
SetIndexBuffer(2, FastDnPts);
SetIndexBuffer(3, FastUpPts);
si (fractals_show == verdadero)
{
SetIndexStyle(0, DIBUJAR_FLECHA, 0, 3);
SetIndexStyle(1, DIBUJAR_FLECHA, 0, 3);
SetIndexStyle(2, DIBUJAR_FLECHA, 0, 1);
SetIndexStyle(3, DIBUJAR_FLECHA, 0, 1);
EstablecerFlechaÍndice(0, 218);
EstablecerFlechaÍndice(1, 217);
EstablecerFlechaÍndice(2, 218);
EstablecerFlechaÍndice(3, 217);
}
demás
{
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_NONE);
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);
}
if (Marco de tiempo != 1 && Marco de tiempo != 5 && Marco de tiempo != 15 &&
Marco de tiempo != 60 && Marco de tiempo != 240 && Marco de tiempo != 1440 &&
Marco de tiempo != 10080 && Marco de tiempo != 43200)
marco de tiempo = 0;
si (marco de tiempo <período ())
marco de tiempo = período ();
retorno(0);
}
definición int()
{
EliminarZonas();
DeleteGlobalVars();
retorno(0);
}
inicio int()
{
if (NuevaBarra() == verdadero)
{
int old_zone_count = zone_count;
Fractales Rápidos();
Fractaleslentos();
EliminarZonas();
BuscarZonas();
DibujarZonas();
if (zone_count < old_zone_count)
DeleteOldGlobalVars(old_zone_count);
}
si (zone_show_info == verdadero)
{
para (int i=0; i<zone_count; i++)
{
cadena lbl;
if (zone_strength[i] == ZONE_PROVEN)
lbl=""; // Probado
si no (zone_strength[i] == ZONE_VERIFIED)
lbl=""; // Comprobado
si no (zone_strength[i] == ZONE_UNTESTED)
lbl=""; // NO prueba
si no (zone_strength[i] == ZONE_TURNCOAT)
lbl=""; // Inversión
demás
lbl=""; // Débil
if (zone_type[i] == ZONE_SUPPORT)
lbl = lbl + "debajo"; //Apoyo
demás
lbl = lbl + "sop"; //Resistencia
if (zone_hits[i] > 0 && zone_strength[i] > ZONE_UNTESTED)
{
si (zona_hits[i] == 1)
lbl = lbl + ",T=" + zone_hits[i]; //Recuento de prueba
demás
lbl = lbl + ",T=" + zone_hits[i]; //Recuento de prueba
}
int ajustar_hpos;
int wbpc = WindowBarsPerChart();
intk;
k = Periodo() * 60 + (20 + StringLen(lbl));
si (wbpc < 80)
ajustar_hpos = Tiempo[0] + k * 4;
si no (wbpc < 125)
ajustar_hpos = Tiempo[0] + k * 8;
si no (wbpc < 250)
ajustar_hpos = Tiempo[0] + k * 15;
si no (wbpc < 480)
ajustar_hpos = Tiempo[0] + k * 29;
si no (wbpc < 950)
ajustar_hpos = Tiempo[0] + k * 58;
demás
ajustar_hpos = Tiempo[0] + k * 115;
cambio int = k * zone_label_shift;
double vpos = zone_hi[i] - (zone_hi[i] - zone_lo[i]) / 2;
// Texto de las descripciones de los niveles
cadena s = "SSSR#"+i+"LBL";
ObjectCreate(s, OBJ_TEXT, 0, 0, 0);
ObjectSet(s, OBJPROP_TIME1, adjust_hpos + shift);
ObjectSet(s, OBJPROP_PRICE1, vpos);
ObjectSetText(s, StringRightPad(lbl, 36, " "), 11, "Courier New",clrWhite); //Negro
}
}
Comprobar Alertas();
retorno(0);
}
anular CheckAlerts()
{
static int lastalert = 0;
si (zone_show_alerts == falso)
devolver;
if (Tiempo[0] - últimaalert > zone_alert_waitseconds)
si (CheckEntryAlerts() == verdadero)
última alerta = Hora[0];
}
bool Comprobar alertas de entrada ()
{
// comprobar las entradas
para (int i=0; i<zone_count; i++)
{
if (Cerrar[0] >= zone_lo[i] && Close[0] < zone_hi[i])
{
si (zone_show_alerts == verdadero)
{
si (zone_alert_popups == verdadero)
{
if (zone_type[i] == ZONE_SUPPORT)
Alert(Symbol() + TimeFrameToString(TimeFrame) + ": Zona de soporte ingresada"); //Zona de apoyo introducida
demás
Alert(Symbol() + TimeFrameToString(TimeFrame) + ": Zona de resistencia ingresada"); //Zona de resistencia introducida
}
si (zone_alert_sounds == verdadero)
ReproducirSonido("alerta.wav");
}
si (enviar_email == verdadero)
{
cadena dir = "";
string msg = StringConcatenate(Symbol(), "-", TimeFrameToString(TimeFrame), " at ", TimeToStr(Time[0], TIME_DATE|TIME_SECONDS),
" ", dir, "Zona ingresada");
if (zone_type[i] == ZONE_SUPPORT)
{
dir = "Soporte";
SendMail("Alerta SS_SupRes_v04c", mensaje);
}
demás
{
dir="resistencia";
SendMail("Alerta SS_SupRes_v04c", mensaje);
}
}
retorno (verdadero);
}
}
falso retorno);
}
void DeleteGlobalVars()
{
if(SetGlobals==falso)
devolver;
GlobalVariableDel("SSSR_Count_"+Símbolo()+Marco de tiempo);
GlobalVariableDel("SSSR_Updated_"+Símbolo()+Marco de tiempo);
int old_count = zone_count;
recuento_zona = 0;
DeleteOldGlobalVars(old_count);
}
void DeleteOldGlobalVars(int old_count)
{
if(SetGlobals==falso)
devolver;
for (int i=zone_count; i<old_count; i++)
{
GlobalVariableDel("SSSR_HI_"+Símbolo()+Marco de tiempo+i);
GlobalVariableDel("SSSR_LO_"+Símbolo()+Marco de tiempo+i);
GlobalVariableDel("SSSR_HITS_"+Símbolo()+Marco de tiempo+i);
GlobalVariableDel("SSSR_STRENGTH_"+Símbolo()+Marco de tiempo+i);
GlobalVariableDel("SSSR_AGE_"+Símbolo()+Marco de tiempo+i);
}
}
void BuscarZonas()
{
int i, j, shift, bustcount=0, testcount = 0;
hival doble, loval;
bool convertido = falso, ha convertido = falso;
doble temp_alta[1000], temp_baja[1000];
int temp_start[1000], temp_hits[1000], temp_strength[1000], temp_count = 0;
bool temp_turn[1000], temp_merge[1000];
int merge1[1000], merge2[1000], merge_count = 0;
// recorrer las zonas de la más antigua a la más pequeña (ignorar los últimos 5 compases),
// encontrar a los que sobrevivieron hasta el presente...
for (shift=MathMin(iBars(NULL, TimeFrame)-1, BackLimit); shift>5; shift--)
{
double atr = iATR(NULL, TimeFrame, 7, shift);
doble fu = atr/2 * zone_fuzzfactor;
bool es Débil;
bool toqueOk = falso;
bool esBusto = falso;
cierre doble = iClose(NULL, TimeFrame, shift);
doble alto = iHigh(NULL, TimeFrame, shift);
doble bajo = iLow(NULL, TimeFrame, shift);
doble hola_i;
doble lo_i;
si (FastUpPts[shift] > 0.001)
{
// punto alto en zigzag
esDébil = verdadero;
si (SlowUpPts[shift] > 0.001)
esDébil = falso;
hival=alto;
si (zone_extend == verdadero)
hival += fu;
loval = MathMax(MathMin(close, high-fu), high-fu*2);
giro=falso;
se ha vuelto=falso;
esbusto=falso;
contador de bus = 0;
recuento de pruebas = 0;
para (i=desplazamiento-1; i>=0; i--)
{
hi_i = iHigh(NULL, TimeFrame, i);
lo_i = iLow(NULL, TimeFrame, i);
if ((convertido == falso && FastUpPts[i] >= loval && FastUpPts[i] <= hival) ||
(convertido == verdadero && FastDnPts[i] <= hival && FastDnPts[i] >= loval))
{
// Toque potencial, solo asegúrate de que hayan pasado más de 10 velas desde la última vez
tocarOk = verdadero;
para (j=i+1; j<i+11; j++)
{
if ((convertido == falso && FastUpPts[j] >= loval && FastUpPts[j] <= hival) ||
(convertido == verdadero && FastDnPts[j] <= hival && FastDnPts[j] >= loval))
{
tocarOk = falso;
romper;
}
}
si (tocarOk == verdadero)
{
// tenemos un toque. Si fue arrestado una vez, elimine el bustcount
// ya que sabemos que este nivel sigue siendo válido y acaba de cambiar de lado
contador de bus = 0;
recuento de pruebas++;
}
}
if ((convertido == falso && hi_i > hival) ||
(convertido == verdadero && lo_i <loval))
{
// este nivel ha sido violado al menos una vez
recuento de busto ++;
if (bustcount > 1 || isWeak == true)
{
// dos o más
esBusto = verdadero;
romper;
}
si (convertido == verdadero)
giro=falso;
más si (convertido == falso)
giro=verdadero;
se ha vuelto = verdadero;
// olvidar golpes anteriores
recuento de pruebas = 0;
}
}
si(esBusto==falso)
{
// el nivel sigue siendo válido, agregue a nuestra lista
temp_hi[temp_count] = hival;
temp_lo[temp_count] = loval;
temp_turn[temp_count] = ha girado;
temp_hits[temp_count] = testcount;
temp_start[temp_count] = turno;
temp_merge[temp_count] = falso;
si (recuento de pruebas > 3)
temp_strength[temp_count] = ZONE_PROVEN;
si no (recuento de pruebas > 0)
temp_strength[temp_count] = ZONA_VERIFICADA;
otra cosa si (se ha vuelto == verdadero)
temp_strength[temp_count] = ZONE_TURNCOAT;
más si (es débil == falso)
temp_strength[temp_count] = ZONE_UNTESTED;
demás
temp_strength[temp_count] = ZONA_DÉBIL;
cuenta_temp++;
}
}
si no (FastDnPts[shift] > 0.001)
{
// punto de zigzag bajo
esDébil = verdadero;
si (SlowDnPts[shift] > 0.001)
esDébil = falso;
loval = bajo;
si (zone_extend == verdadero)
loval = fu;
hival = MathMin(MathMax(cerrar, bajo+fu), bajo+fu*2);
giro=falso;
se ha vuelto=falso;
contador de bus = 0;
recuento de pruebas = 0;
esbusto=falso;
para (i=desplazamiento-1; i>=0; i--)
{
hi_i = iHigh(NULL, TimeFrame, i);
lo_i = iLow(NULL, TimeFrame, i);
if ((convertido == verdadero && FastUpPts[i] >= loval && FastUpPts[i] <= hival) ||
(convertido == falso && FastDnPts[i] <= hival && FastDnPts[i] >= loval))
{
// Toque potencial, solo asegúrate de que hayan pasado más de 10 velas desde la última vez
tocarOk = verdadero;
para (j=i+1; j<i+11; j++)
{
if ((convertido == verdadero && FastUpPts[j] >= loval && FastUpPts[j] <= hival) ||
(convertido == falso && FastDnPts[j] <= hival && FastDnPts[j] >= loval))
{
tocarOk = falso;
romper;
}
}
si (tocarOk == verdadero)
{
// tenemos un toque. Si fue arrestado una vez, elimine el bustcount
// ya que sabemos que este nivel sigue siendo válido y acaba de cambiar de lado
contador de bus = 0;
recuento de pruebas++;
}
}
if ((convertido == verdadero && hi_i > hival) ||
(convertido == falso && lo_i <loval))
{
// este nivel ha sido violado al menos una vez
recuento de busto ++;
if (bustcount > 1 || isWeak == true)
{
// dos o más
esBusto = verdadero;
romper;
}
si (convertido == verdadero)
giro=falso;
más si (convertido == falso)
giro=verdadero;
se ha vuelto = verdadero;
// olvidar golpes anteriores
recuento de pruebas = 0;
}
}
si(esBusto==falso)
{
// el nivel sigue siendo válido, agregue a nuestra lista
temp_hi[temp_count] = hival;
temp_lo[temp_count] = loval;
temp_turn[temp_count] = ha girado;
temp_hits[temp_count] = testcount;
temp_start[temp_count] = turno;
temp_merge[temp_count] = falso;
si (recuento de pruebas > 3)
temp_strength[temp_count] = ZONE_PROVEN;
si no (recuento de pruebas > 0)
temp_strength[temp_count] = ZONA_VERIFICADA;
otra cosa si (se ha vuelto == verdadero)
temp_strength[temp_count] = ZONE_TURNCOAT;
más si (es débil == falso)
temp_strength[temp_count] = ZONE_UNTESTED;
demás
temp_strength[temp_count] = ZONA_DÉBIL;
cuenta_temp++;
}
}
}
// buscar zonas superpuestas...
si (zone_merge == verdadero)
{
combinar_cuenta = 1;
iteraciones internas = 0;
while (merge_count > 0 && iteraciones < 3)
{
combinar_cuenta = 0;
iteraciones++;
para (i = 0; i <temp_count; i++)
temp_merge[i] = falso;
para (i = 0; i <temp_count-1; i++)
{
si (temp_hits[i] == -1 || temp_merge[j] == verdadero)
Seguir;
para (j = i+1; j < cuenta_temp; j++)
{
si (temp_hits[j] == -1 || temp_merge[j] == verdadero)
Seguir;
if ((temp_hi[i] >= temp_lo[j] && temp_hi[i] <= temp_hi[j]) ||
(temp_lo[i] <= temp_hi[j] && temp_lo[i] >= temp_lo[j]) ||
(temp_hi[j] >= temp_lo[i] && temp_hi[j] <= temp_hi[i]) ||
(temp_baja[j] <= temp_alta[i] && temp_baja[j] >= temp_baja[i]))
{
fusionar1[merge_count] = i;
fusionar2[merge_count] = j;
temp_merge[i] = verdadero;
temp_merge[j] = verdadero;
unir_cuenta++;
}
}
}
// ... y combinarlos ...
para (i=0; i<merge_count; i++)
{
int objetivo = fusionar1[i];
fuente int = fusionar2[i];
temp_hi[objetivo] = MathMax(temp_hi[objetivo], temp_hi[fuente]);
temp_lo[objetivo] = MathMin(temp_lo[objetivo], temp_lo[origen]);
temp_hits[objetivo] += temp_hits[origen];
temp_start[objetivo] = MathMax(temp_start[objetivo], temp_start[origen]);
temp_strength[objetivo] = MathMax(temp_strength[objetivo], temp_strength[fuente]);
si (temp_hits[objetivo] > 3)
temp_strength[objetivo] = ZONE_PROVEN;
if (temp_hits[objetivo] == 0 && temp_turn[objetivo] == false)
{
temp_hits[objetivo] = 1;
if (temp_strength[target] <ZONE_VERIFIED)
fuerza_temp[objetivo] = ZONA_VERIFICADA;
}
if (temp_turn[target] == false || temp_turn[source] == false)
temp_turn[objetivo] = falso;
if (temp_turn[objetivo] == verdadero)
temp_hits[objetivo] = 0;
temp_hits[fuente] = -1;
}
}
}
// copia el resto de la lista a nuestras zonas oficiales
recuento_zona = 0;
para (i=0; i<temp_count; i++)
{
si (temp_hits[i] >= 0 && zone_count < 1000)
{
zone_hi[zone_count] = temp_hi[i];
zone_lo[zone_count] = temp_lo[i];
zone_hits[zone_count] = temp_hits[i];
zone_turn[zone_count] = temp_turn[i];
zone_start[zone_count] = temp_start[i];
zone_strength[zone_count] = temp_strength[i];
if (zone_hi[zone_count] < Cerrar[4])
zone_type[zone_count] = ZONE_SUPPORT;
else if (zone_lo[zone_count] > Cerrar[4])
zone_type[zone_count] = ZONE_RESIST;
demás
{
para (j=5; j<1000; j++)
{
if (iClose(NULL, TimeFrame, j) < zone_lo[zone_count])
{
zone_type[zone_count] = ZONE_RESIST;
romper;
}
más si (iClose(NULL, TimeFrame, j) > zone_hi[zone_count])
{
zone_type[zone_count] = ZONE_SUPPORT;
romper;
}
}
si (j == 1000)
zone_type[zone_count] = ZONE_SUPPORT;
}
zone_count++;
}
}
}
void DrawZones()
{
if(SetGlobals==verdadero)
{
GlobalVariableSet("SSSR_Count_"+Symbol()+TimeFrame, zone_count);
GlobalVariableSet("SSSR_Updated_"+Symbol()+TimeFrame, TimeCurrent());
}
para (int i=0; i<zone_count; i++)
{
if (zone_strength[i] == ZONE_WEAK && zone_show_weak == falso)
Seguir;
cadena s = "SSSR#"+i+" Fuerza=";
if (zone_strength[i] == ZONE_PROVEN)
s = s + "Probado, Test Count=" + zone_hits[i];
si no (zone_strength[i] == ZONE_VERIFIED)
s = s + "Verificado, Test Count=" + zone_hits[i];
si no (zone_strength[i] == ZONE_UNTESTED)
s = s + "No probado";
si no (zone_strength[i] == ZONE_TURNCOAT)
s = s + "Chaquetón";
demás
s = s + "débil";
ObjectCreate(s, OBJ_RECTANGLE , 0, 0, 0, 0, 0);
ObjectSet(s, OBJPROP_TIME1, iTime(NULL, TimeFrame, zone_start[i]));
ObjectSet(s, OBJPROP_TIME2, TimeCurrent());
ObjectSet(s, OBJPROP_PRICE1, zone_hi[i]);
ObjectSet(s, OBJPROP_PRICE2, zone_lo[i]);
ObjectSet(s, OBJPROP_BACK, zone_solid);
ObjectSet(s, OBJPROP_WIDTH, zone_linewidth);
ObjectSet(s, OBJPROP_STYLE, zone_style);
if (zone_type[i] == ZONE_SUPPORT)
{
// zona de apoyo
if (zone_strength[i] == ZONE_TURNCOAT)
ObjectSet(s, OBJPROP_COLOR, color_support_turncoat);
si no (zone_strength[i] == ZONE_PROVEN)
ObjectSet(s, OBJPROP_COLOR, color_support_proven);
si no (zone_strength[i] == ZONE_VERIFIED)
ObjectSet(s, OBJPROP_COLOR, color_support_verified);
si no (zone_strength[i] == ZONE_UNTESTED)
ObjectSet(s, OBJPROP_COLOR, color_support_untested);
demás
ObjectSet(s, OBJPROP_COLOR, color_support_weak);
}
demás
{
// zona de resistencia
if (zone_strength[i] == ZONE_TURNCOAT)
ObjectSet(s, OBJPROP_COLOR, color_resist_turncoat);
si no (zone_strength[i] == ZONE_PROVEN)
ObjectSet(s, OBJPROP_COLOR, color_resist_proven);
si no (zone_strength[i] == ZONE_VERIFIED)
ObjectSet(s, OBJPROP_COLOR, color_resist_verified);
si no (zone_strength[i] == ZONE_UNTESTED)
ObjectSet(s, OBJPROP_COLOR, color_resist_untested);
demás
ObjectSet(s, OBJPROP_COLOR, color_resist_weak);
}
if(SetGlobals==verdadero)
{
GlobalVariableSet("SSSR_HI_"+Símbolo()+Marco de tiempo+i, zone_hi[i]);
GlobalVariableSet("SSSR_LO_"+Symbol()+TimeFrame+i, zone_lo[i]);
GlobalVariableSet("SSSR_HITS_"+Symbol()+TimeFrame+i, zone_hits[i]);
GlobalVariableSet("SSSR_STRENGTH_"+Symbol()+TimeFrame+i, zone_strength[i]);
GlobalVariableSet("SSSR_AGE_"+Symbol()+TimeFrame+i, zone_start[i]);
}
}
}
bool Fractal(int M, int P, int shift)
{
si (Marco de tiempo > P)
P = marco de tiempo;
P = P / Marco de tiempo * 2 + MathCeil (P / Marco de tiempo / 2);
si (cambio <p)
falso retorno);
if (shift > iBars(Symbol(), TimeFrame)-P)
falso retorno);
para (int i=1; i<=P; i++)
{
si (M == PUNTO_ARRIBA)
{
if (iHigh(NULL, TimeFrame, shift+i) > iHigh(NULL, TimeFrame, shift))
falso retorno);
if (iHigh(NULL, TimeFrame, shift-i) >= iHigh(NULL, TimeFrame, shift))
falso retorno);
}
si (M == DN_PUNTO)
{
if (iLow(NULL, TimeFrame, shift+i) < iLow(NULL, TimeFrame, shift))
falso retorno);
if (iLow(NULL, TimeFrame, shift-i) <= iLow(NULL, TimeFrame, shift))
falso retorno);
}
}
retorno (verdadero);
}
anular FastFractals()
{
int-desplazamiento;
int limit = MathMin(Bars-1, BackLimit);
int P = Marco de tiempo * fractal_fast_factor;
FastUpPts[0] = 0.0; FastUpPts[1] = 0.0;
FastDnPts[0] = 0.0; FastDnPts[1] = 0.0;
for (shift=límite; shift>1; shift--)
{
if (Fractal(UP_POINT, P, shift) == verdadero)
FastUpPts[shift] = iHigh(NULL, TimeFrame, shift);
demás
FastUpPts[cambio] = 0.0;
if (Fractal(DN_POINT, P, shift) == verdadero)
FastDnPts[shift] = iLow(NULL, TimeFrame, shift);
demás
FastDnPts[desplazamiento] = 0,0;
}
}
void Fractales Lentos()
{
int-desplazamiento;
int limit = MathMin(iBars(Symbol(), TimeFrame) - 1, BackLimit);
int P = Marco de tiempo * fractal_slow_factor;
SlowUpPts[0] = 0.0; SlowUpPts[1] = 0.0;
SlowDnPts[0] = 0.0; SlowDnPts[1] = 0.0;
for (shift=límite; shift>1; shift--)
{
if (Fractal(UP_POINT, P, shift) == verdadero)
SlowUpPts[shift] = iHigh(NULL, TimeFrame, shift);
demás
SlowUpPts[cambio] = 0.0;
if (Fractal(DN_POINT, P, shift) == verdadero)
SlowDnPts[shift] = iLow(NULL, TimeFrame, shift);
demás
SlowDnPts[desplazamiento] = 0,0;
}
}
bool NuevaBarra()
{
fecha y hora estática LastTime = 0;
if (iTime(NULL, TimeFrame, 0) != LastTime)
{
LastTime = iTime(NULL, TimeFrame, 0)+time_offset;
retorno (verdadero);
}
demás
falso retorno);
}
anular EliminarZonas()
{
intlen = 5;
ent yo;
while (i <TotalObjetos())
{
cadena objName = ObjectName(i);
if (StringSubstr(objName, 0, len) != "SSSR#")
{
yo++;
Seguir;
}
EliminarObjeto(objNombre);
}
}
cadena TimeFrameToString(int tf) // código de TRO
{
cadena tfs;
cambiar (tf)
{
caso PERIODO_M1:
tfs="M1" ;
romper;
caso PERIODO_M5:
tfs="M5" ;
romper;
caso PERIODO_M15:
tfs="M15" ;
romper;
caso PERIODO_M30:
tfs="M30" ;
romper;
caso PERIODO_H1:
tfs="H1" ;
romper;
caso PERIODO_H4:
tfs="H4" ;
romper;
caso PERIODO_D1:
tfs="D1" ;
romper;
caso PERIODO_W1:
tfs="W1" ;
romper;
caso PERIODO_MN1:
tfs="MN";
}
retorno(tfs);
}
cadena StringRepeat(cadena str, int n = 1)
{
cadena salida = "";
for(int i = 0; i < n; i++) outstr = outstr + str;
return(outstr);
}
cadena StringRightPad(cadena str, int n=1, string str2=" ")
{
return(str + StringRepeat(str2,n-StringLen(str)));
Cambiando a MT5. Ayúdame con una palabra. ¿Cómo escribe MT5 en código, qué es lo que falla?
PREGUNTA: ¿Por qué cae todo tipo de basura en el tampón?
Estoy en la etapa de constructor de Lego, es decir, copio el módulo y trato de entender las peculiaridades de MT5 por la experiencia. Documentación, por supuesto.
Cambiando a MT5. Ayúdame con una palabra. ¿Cómo escribe MT5 en el código, lo que está mal?
PREGUNTA: ¿Por qué cae todo tipo de basura en el tampón?
en mt5 las series de tiempo van al revés
si lo necesitas igual que en mt4, es decirArraySetAsSeries
Cambiando a MT5. Ayúdame con una palabra. ¿Cómo en MT5 se escribe en código, lo que está mal?
PREGUNTA: ¿Por qué cae todo tipo de basura en el tampón?
Estoy en la fase de constructor de Lego, es decir, copio el módulo y entiendo las peculiaridades del MT% por experiencia. Documentación, por supuesto.
Gracias por la respuesta.
Comprobado en MT5... Qué lío... Los puntos están dispersos por todo el gráfico de forma extraña, en algún lugar de la historia... No entiendo qué y por qué no le gusta a MT5? ¡¡¡El problema es simple!!!
TÓMALO EN MT4
.
Y ASÍ EN MT5. Por supuesto en un buffer. Pero el problema es que el indicador está cogiendo puntos, pero no esos y no ahí...(((
Por favor, dígame otra vez. Lo que hice mal en el código MT5????
Tengo algo en MT5. Pero los topes... un misterio
Gracias por la respuesta.
Comprobado en MT5... Qué lío... Los puntos están dispersos por todo el gráfico de forma extraña, en algún lugar de la historia... No entiendo qué y por qué no le gusta a MT5? ¡¡¡El problema es simple!!!
TÓMALO EN MT4
.
Y ASÍ EN MT5 . Por supuesto, en un buffer. Pero el problema es que el indicador está cogiendo puntos, pero no esos y no ahí...(((
Por favor, ayúdenme de nuevo. Lo que hice mal en el código MT5????
Tengo algo en MT5. Pero los topes... un misterio
No hay ningún misterio. La numeración es diferente a la de mql4 y los buffers de los indicadores no se ponen a cero automáticamente. Para limpiar la "basura", el programador debe cuidar la limpieza de los índices si no van a contener valores.
No es un misterio. La numeración es diferente a la de mql4 y los buffers de los indicadores no se ponen a cero automáticamente. Para despejar la "basura", el programador debe cuidar la pureza de los índices para que no contengan valores.
La pregunta es, ¿POR QUÉ se ponen las marcas (puntos) en cualquier lugar? ¡¡¡¡He definido en el código el algoritmom!!!! La condición de MA en el cuerpo de la vela. ¿No es suficiente?
La pregunta es, ¿POR QUÉ se ponen las marcas (puntos) en cualquier lugar? ¡¡¡¡He definido en el código el algoritmom!!!! La condición de MA en el cuerpo de la vela. ¿No es suficiente?
Mira aquí.
Cambiando a MT5. Ayúdame con una palabra.
Artem ha dado el código completo en lugar de la palabra ayuda. Cada uno tiene su propio enfoque al respecto. Intento no dar código ya hecho, pero aún así a veces fallo.
Gracias por la respuesta.
Comprobado en MT5... Es un poco desordenado...Pero los gráficos de comparación son tiempos completamente diferentes. ¿Cómo se puede juzgar si los puntos están bien o mal?
Por lo tanto, una palabra de ayuda.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Cualquier pregunta para principiantes de MQL4, ayuda y discusión sobre algoritmos y códigos
Alexey Viktorov, 2019.01.21 11:04
No es un misterio. La numeración es diferente a la de mql4 y los búferes de los indicadores no se ponen a cero automáticamente. Para limpiar la "basura", el propio programador debe ocuparse de la limpieza de los índices si no deben contener valores.
Aquí tienes un vistazo.
Artiom dio el código completo en lugar de ayudar con la palabra. Cada uno tiene un enfoque diferente de esto. Intento no dar un código ya hecho, pero aún así a veces falla.
Pero los gráficos de comparación son tiempos completamente diferentes. ¿Cómo se puede juzgar si los puntos son correctos o incorrectos?
Por lo tanto, una palabra de ayuda.
Hallelujah!!!!! Cambiado open[i] y close[i] a iOpen(NULL,PERIOD_H1,i)
Hallelujah!!!!! Cambiado open[i] y close[i] a iOpen(NULL,PERIOD_H1,i)
¿Cuál es la diferencia? Si el indicador está en H1, es sólo en la velocidad de acceso - usted tiene uno más lento. En mi ejemplo, probablemente se te haya pasado por alto que tienes que configurar los arrays open y close para la indexación en serie. Subrayé lo que no tenías. Tienes un bucle desde el principio hasta el final - desde el límite hasta el 0, y no has indexado arrays - por lo que se ha dibujado hacia atrás y hacia delante.