Características úteis da KimIV - página 84

 
vopros писал(а) >>

Igor, olá!

Você poderia aconselhar como implementar uma notificação sonora em um indicador existente?

Por exemplo, em ZigZag. Como posso acrescentar, que haverá um som no momento de traçar a nova linha:

//| ZIG-ZAG_RPoint_v2_m.mq4 |https://www.mql5.com/ru/code/8739
//| Copyright © 2004-2008, Poul_Trade_Forum |Reproduziu o código do indicador RPoint . RPoint'.
//| Aborigen & Kharko |
//| http://forex.kbpauk.ru/ | QUALIDADE ZIGZAG
//+------------------------------------------------------------------+

 

Cavalheiros programadores, favor fazer um EA (por dinheiro razoável) a partir do indicador de Kim.

Detalhes pelo correio

Vladimir

vladmo@mail.ru

//+------------------------------------------------------------------+
//| i-MorningRange.mq4 |
//| Kim Igor V. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| 08.02.2006 O indicador do intervalo da manhã |
//+------------------------------------------------------------------+
#direitos de propriedade intelectual "Kim Igor V. aka KimIV"
#link da propriedade "http://www.kimiv.ru"

#janela_do_cartão_indicador de propriedade
#property indicator_buffers 2
#código de propriedade_cores1 azul
#indicador de propriedade_color2 Laranja

//------- Parâmetros indicadores externos -------------------------------
fio externo CheckTime = "08:00"; // Tempo de alcance da verificação
showHistória externa = Verdadeiro; // Mostrar níveis de história
Número externo interno de dias = 5; // Número de dias de história
comentário externo ShowComment = True; // Mostrar comentários

//------- Buffers indicadores ------------------------------------------
duplo dBuf0[], dBuf1[];

//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
init() {
SetIndexArrow(0, 217);
SetIndexBuffer(0, dBuf0);
SetIndexStyle (0, DRAW_ARROW, 1, 2);
SetIndexArrow(1, 218);
SetIndexBuffer(1, dBuf1);
SetIndexStyle (1, DRAW_ARROW, 1, 2);

DeleteLines();
para (int i=0; i<2; i++) {
ObjectCreate("HLine "+i, OBJ_HLINE, 0, 0,0);
}

para (i=0; i<NúmeroOdeDias; i++) {
CreateLines("upLine "+i, indicador_color1);
CreateLines("dnLine "+i, indicador_color2);
}
}

//+------------------------------------------------------------------+
//| CreateLine objects |
//| Parâmetros: |
//| no - nome da linha |||
//| cl - cor da linha |
//+------------------------------------------------------------------+
CreateLines(string no, cor cl) {
ObjectCreate(no, OBJ_TREND, 0, 0,0, 0,0);
ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(no, OBJPROP_WIDTH, 1);
ObjectSet(no, OBJPROP_COLOR, cl);
ObjectSet(no, OBJPROP_RAY, False);
}

//+------------------------------------------------------------------+
//| Função de desinicialização de indicador personalizada |
//+------------------------------------------------------------------+
void deinit() {
DeleteLines();
Comentário(");
}

//+------------------------------------------------------------------+
//| Eliminar linhas horizontais. |
//+------------------------------------------------------------------+
EliminarLinhas() {
para (int i=0; i<2; i++) {
ObjectDelete("HLine "+i);
}

para (i=0; i<NúmeroOdeDias; i++) {
ObjectDelete("upLine "+i);
ObjectDelete("dnLine "+i);
}
}

//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
início nulo() {
data hora t1, t2, dt;
duplo p1, p2;
int b1, b2; sd=0;

t1=StrToTime(TimeToStr(CurTime(), TIME_DATE)+" 00:00");
t2=StrToTime(TimeToStr(CurTime(), TIME_DATE)+""+CheckTime);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=Alto[Altíssimo(NULL, 0, MODE_HIGH, b1-b2+1, b2)];
p2=Low[Lowest(NULL, 0, MODE_LOW, b1-b2+1, b2)];

SetHLine(0, p1);
SetHLine(1, p2);

se (ShowHistory) {
dt=decDateTradeDay(CurTime()));
para (int i=0; i<NumberOfDays; i++) {
DrawLines(dt, i);
dt=decDateTradeDay(dt);
while (TimeDayOfWeek(dt)<1 || TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
}
}

if (ShowComment) Comment("CheckTime="+CheckTime);
}

//+------------------------------------------------------------------+
//| Defina os detalhes da linha horizontal do dia atual. |
//+------------------------------------------------------------------+
SetHLine(int nl, double pp) {
cor cl;

se (pp!=EMPTY_VALUE) {
interruptor (nl) {
caso 0: cl=indicator_color1; break;
caso 1: cl=indicator_color2; break;
}
ObjectSet("HLine "+nl, OBJPROP_COLOR, cl);
ObjectSet("HLine "+nl, OBJPROP_PRICE1, pp);
ObjectSet("HLine "+nl, OBJPROP_STYLE, STYLE_DOT);
}
}

//+------------------------------------------------------------------+
//| Traçar linhas na tabela |
//| Parâmetros: |
//| dt - data do dia de negociação |
//| nd - número do dia (para numeração de objetos) |
//+------------------------------------------------------------------+
DrawLines(datetime dt, int nd) {
data hora t1, t2;
duplo p1, p2;
int b1, b2;

t1=StrToTime(TimeToStr(dt, TIME_DATE)+" 00:00")
t2=StrToTime(TimeToStr(dt, TIME_DATE)+""+CheckTime);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=Alto[Altíssimo(NULL, 0, MODE_HIGH, b1-b2+1, b2)];
p2=Low[Lowest(NULL, 0, MODE_LOW, b1-b2+1, b2)];

ObjectSet("upLine "+nd, OBJPROP_TIME1, t1);
ObjectSet("upLine "+nd, OBJPROP_PRICE1, p1);
ObjectSet("upLine "+nd, OBJPROP_TIME2, t2);
ObjectSet("upLine "+nd, OBJPROP_PRICE2, p1);

ObjectSet("dnLine "+nd, OBJPROP_TIME1, t1);
ObjectSet("dnLine "+nd, OBJPROP_PRICE1, p2);
ObjectSet("dnLine "+nd, OBJPROP_TIME2, t2);
ObjectSet("dnLine "+nd, OBJPROP_PRICE2, p2);
}

//+------------------------------------------------------------------+
//| Diminuir a data em um dia de negociação |
//| Parâmetros: |
//| dt - data do dia de negociação |
//+------------------------------------------------------------------+
datatime decDateTradeDay(datetime dt) {
int ty=TimeYear(dt);
int tm=TimeMonth(dt);
int td=TimeDay(dt);
int th=TimeHour(dt);
int ti=TimeMinute(dt);

td--;
se (td==0) {
tm--;
se (tm==0) {
ty..;
tm=12;
}
if (tm===1 || tm===3 || tm===5 ||| tm===7 || tm===8 || tm====10 || tm===12) td=31;
if (tm===2) if (MathMod(ty, 4)==0) td=29; else td=28;
if (tm===4 || tm===6 ||| tm===9 || tm===11) td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

 
Igor, olá! Há dois especialistas (expert1 e expert2). Expert1 tem um arquivo no qual escreve os dados de cada nova linha. Expert2 tem um valor a ser comparado com o valor máximo no arquivo. Por favor, ajude-me a tirar este número máximo.
 
Milka писал(а) >>
Olá Igor, há dois Expert Advisors (Expert1 e Expert2). Expert1 tem um arquivo no qual escreve os dados de cada nova linha. Expert2 tem um valor a ser comparado com o valor máximo em arquivo. Por favor, ajude-me a puxar este número máximo.

No Expert 2, carregue todos os números em uma matriz e depois use o ArrayMaximum().

 
KimIV >> :

No Expert 2, carregue todos os números em uma matriz e depois use o ArrayMaximum().

Eu simplesmente não posso carregar os dados em uma matriz

 
Milka писал(а) >>

Estou tendo problemas para carregar dados em uma matriz.

Confira as funções da minha matriz nesta linha. Os exemplos devem preencher as matrizes com dados.

 

Igor, olá!

Quando eu crio uma linha em um gráfico ( por exemplo - ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]) a plataforma desenha um DRIVE de comprimento infinito, enquanto o tutorial diz - uma TREAD! Não consigo encontrar como transformar OBJ_TREND em um segmento com o comprimento certo. Converter manualmente todos os raios ou truques (desenhar um triângulo, por assim dizer) parece estar fora de questão. Você pode me dar uma dica...

 
alexpert007 писал(а) >>

Igor, olá!

Quando eu crio uma linha em um gráfico ( por exemplo - ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1]) a plataforma desenha um DRIVE de comprimento infinito, enquanto o tutorial diz - uma TREAD! Não consigo encontrar como transformar OBJ_TREND em um segmento com o comprimento certo. Converter manualmente todos os raios ou truques (desenhar um triângulo, por assim dizer) parece estar fora de questão. Dica...

Use ObjectSet(tLine, OBJPROP_RAY, False).

 

Olá Igor,

Já levantei a questão sobre o fechamento parcial de posições, e em particular, o erro 131 (p. 49-50 auth.6232). Não é um problema fechar parcialmente as posições, mas o erro 131 no registro não me permite continuar a escrever a EA. Encontrei um link para sua função "Fechar um terço de uma posição" no ramo "Existe uma função pronta para o fechamento parcial de uma posição", mas não encontrei a função dada aqui, neste ramo, nem sua resposta à pergunta do 6232. A resposta (p.50) ajudou a resolver parcialmente o problema. O registro não gerou um erro, mas um efeito colateral apareceu - a primeira posição aberta não foi fechada como requerido.

Para comparação, o primeiro gráfico fechou "como deve ser", mas com 131 erros constantemente:

e um gráfico sem erros, mas com a primeira (e por alguma razão apenas a primeira) posição aberta fechando incorretamente:

 

O código de fechamento era parecido com este:

Arquivos anexados:
codv1.mq4  8 kb