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
//+------------------------------------------------------------------+

[Excluído]  

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.

[Deleted]  

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