Como codificar? - página 62

 
Dan7974:
Como posso codificar isto?

Se o mercado tocar (X.XX50 ou X.XX00)

depois comprar. Como identificar os dois últimos números?

obrigado.

Isto deve ser feito:

if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,0.50) ; }

else { xPrice = Close - ( MathMod(100*Close,0.50)*0.01 ) ; }

P1Buffer = xPrice + Point*50;

P2Buffer = xPrice ;

P3Buffer = xPrice - Point*50;

[/CODE]

When MathMod(Close,0.50) = 0 then the price ends in 00 or 50.

Here's my indicator to identify 00 lines:

[CODE]

//+------------------------------------------------------------------+

//| _TRO_00_Lines |

//| |

//| |

//+------------------------------------------------------------------+

#property indicator_chart_window

#property indicator_buffers 3

#property indicator_color1 LightGray

#property indicator_color2 LightGray

#property indicator_color3 LightGray

// indicators parameters

//---- buffers

double P1Buffer[];

double P2Buffer[];

double P3Buffer[];

double xPrice ;

int myStyle = 2 ;

int myWingDing = 250 ;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

SetIndexBuffer(0, P1Buffer);

SetIndexBuffer(1, P2Buffer);

SetIndexBuffer(2, P3Buffer);

SetIndexArrow(0, myWingDing);

SetIndexArrow(1, myWingDing);

SetIndexArrow(2, myWingDing);

SetIndexStyle(0, DRAW_ARROW, myStyle, 1);

SetIndexStyle(1, DRAW_ARROW, myStyle, 1);

SetIndexStyle(2, DRAW_ARROW, myStyle, 1);

SetIndexEmptyValue(0,0);

SetIndexEmptyValue(1,0);

SetIndexEmptyValue(2,0);

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int i, dayi, counted_bars = IndicatorCounted();

//---- check for possible errors

if(counted_bars < 0)

return(-1);

//---- last counted bar will be recounted

if(counted_bars > 0)

counted_bars--;

int limit = Bars - counted_bars;

//----

for(i = limit - 1; i >= 0; i--)

{

if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,1.00) ; }

else { xPrice = Close - ( MathMod(100*Close,1.00)*0.01 ) ; }

P1Buffer = xPrice + Point*100;

P2Buffer = xPrice ;

P3Buffer = xPrice - Point*100;

} // for

return(0);

} // start
 

Mas eu preciso disso para uma EA!

 

Codificadores, por favor, ajudem

O que mudar no código para mover mais pontos para cima e para baixo dos candelabros?

Arquivos anexados:
diagram.gif  18 kb
 

Alguém poderia realmente ajudá-lo se você afixasse o código.

Lux

 

Aqui está o indicador

Indicador que você pode alterar o código para mover pontos para cima e para baixo

Arquivos anexados:
 

uso adequado do Tempo[]

Eu sou um programador justo, mas novo no mql4. Estou trabalhando em um assessor especializado em comércio de caixas (também conhecido como breakout trade). Essencialmente deveria encontrar os valores mais altos e mais baixos para um período de tempo específico, e quando uma vela se fecha fora daquela caixa eu coloco um comércio.

Essencialmente há três estados, eu posso começar minha EA em

1) após o encerramento do dia anterior, e antes da hora de início da caixa.

2) após o início da caixa, mas antes do final da caixa.

3) após o final da caixa.

O que eu acho confuso é a matriz de Tempo[] porque o índice continua mudando. Suponha que eu entrei no estado 2. Na função init eu ia definir uma variável global dando a posição do início da caixa. Como as citações vêm em minha função inicial é constantemente chamada, e uma vez alcançado o final do tempo da caixa, eu teria as posições inicial e final. Claro que esse não é o caso, pois o índice na matriz de tempo continua rolando para frente.

Na melhor das hipóteses, eu posso continuar incrementando a posição do índice de início da caixa, mas isso não parece ser uma maneira muito limpa de fazer as coisas.

Se você tiver uma sugestão sobre como eu deveria mudar meu pensamento do tradicional c/c++ para mql4, eu adoraria ouvir isso.

Também quando eu terminar, eu obviamente me beneficiaria muito com uma revisão de código por um programador mais experiente. Alguém gostaria de ser voluntário para isso?

Obrigado por seu tempo,

Markus

 
mweltin:
Eu sou um programador justo, mas novo no mql4. Estou trabalhando em um consultor especializado em comércio de caixas (também conhecido como breakout trade). Essencialmente, ele deve encontrar os valores mais altos e mais baixos para um período de tempo específico, e quando uma vela se fecha fora daquela caixa, eu coloco uma profissão.

Essencialmente há três estados, posso iniciar minha EA em

1) após o encerramento do dia anterior, e antes da hora de início da caixa.

2) após o início da caixa, mas antes do final da caixa.

3) após o final da caixa.

O que eu acho confuso é a matriz de Tempo[] porque o índice continua mudando. Suponha que eu entrei no estado 2. Na função init eu ia definir uma variável global dando a posição do início da caixa. Como as citações vêm em minha função inicial é constantemente chamada, e uma vez alcançado o final do tempo da caixa, eu teria as posições inicial e final. Claro que esse não é o caso, pois o índice na matriz de tempo continua rolando para frente.

Na melhor das hipóteses, eu posso continuar incrementando a posição do índice de início da caixa, mas isso não parece ser uma maneira muito limpa de fazer as coisas.

Se você tiver uma sugestão sobre como eu deveria mudar meu pensamento do tradicional c/c++ para mql4, eu adoraria ouvir isso.

Também quando eu terminar, eu obviamente me beneficiaria muito com uma revisão de código por um programador mais experiente. Alguém gostaria de ser voluntário para isso?

Obrigado por seu tempo,

Markus

Olá. A função Time[] não está sempre mudando - somente no final da barra do gráfico atual é que ela muda. TimeCurrent() por outro lado, retorna um valor em constante mudança (embora, com uma resolução de 1 segundo).

Você pode obter o tempo exato de qualquer barra e período de tempo usando também o iTime(). Há várias maneiras de fazer isso...

 

abrir dois pedidos ao mesmo tempo (problema...)

Olá, não sei porque em algumas Oportunidades o roteiro abre dois pedidos ao mesmo tempo.

alguém pode me ajudar com isto, por favor

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,EAName, MagicNo, 0,Green);

mais

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,EAName, MagicNo, 0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido aberto : ",OrderOpenPrice());

}

else Print("Erro na abertura do pedido de compra : ",GetLastError());

agradecimentos

 

Ajuda para o código

Olá a todos,

Eu gostaria de codificar um indicador para calcular o valor próximo que cria uma inversão de um indicador como o HMA. Para isso, preciso criar uma função para computar um valor de HMA com uma aba de valores fechados onde modifico o valor atual em um loop de dicotomia para encontrar o valor que cria a inversão.

Alguém pode me ajudar com minha função ComputeHull ?

Aqui meu código, sem dicotomia, é apenas um simples indicador HMA com a função computeHull, o indicador é exibido, mas é deslocado para baixo.

Cumprimentos

//#janela_indicadora de propriedade_separate_window

#janela_do_cartão_indicador de propriedade

#property indicator_buffers 3

#Indicador de propriedade_color1 Azul

//---- parâmetros de entrada

externo int HullAntPeriod=12;

//---- buffers

duplo TempBuf1[];

duplo TempBuf2[];

duplo HullAntBuf[];

//Variável

no período HalfHullAntPeriod;

int SqrtHullAntPeriodo;

//+------------------------------------------------------------------+

//| Funções específicas |

//+------------------------------------------------------------------+

double ComputeHull(int ActualBar)

{

duplo CloseTemp[];

duplo Temp[];

duplo Temp1, Temp2;

duplo resultado = -1;

int i;

//Copiar valores CloseTemp para CloseTemp

ArrayResize(CloseTemp, HullAntPeriod+SqrtHullAntPeriod);

ArrayCopy(CloseTemp, Close, 0, ActualBar, HullAntPeriod+SqrtHullAntPeriod);

ArraySetAsSeries(CloseTemp, true);

ArrayResize(Temp, SqrtHullAntPeriod);

//HMA cálculo do valor

for(i=0; i<SqrtHullAntPeriod; i++)

{

Temp1 = iMAOnArray(CloseTemp, 0, HalfHullAntPeriod, 0, MODE_LWMA, i);

Temp2 = iMAOnArray(CloseTemp, 0, HullAntPeriod, 0, MODE_LWMA, i);

Temp = 2*Temp1-Temp2;

}

ArraySetAsSeries(Temp, true);

resultado = iMAOnArray(Temp, 0, SqrtHullAntPeriod, 0, MODE_LWMA, 0);

//---- feito

retorno(resultado);

}

//+------------------------------------------------------------------+

//| Função de inicialização do indicador personalizado |

//+------------------------------------------------------------------+

int init()

{

//---- 1 buffers adicionais são usados para dados temporários.

IndicatorBuffers(3);

//---- definições de desenho

SetIndexStyle(0,DRAW_LINE);

SetIndexStyle(1,DRAW_NONE);

//---- 2 mapeamento de buffers indicadores

SetIndexBuffer(0,HullAntBuf);

SetIndexBuffer(1,TempBuf1);

SetIndexBuffer(2,TempBuf2);

//---- nome para DataWindow e subwindow label do indicador

IndicatorShortName("HULL ANTICIP("+HullAntPeriod+")");

SetIndexLabel(0, "HULL ANTICIPATION");

SetIndexLabel(1,NULL);

SetIndexLabel(2,NULL);

//---- Inicialização de indicadores específicos

HalfHullAntPeriod = MathFloor(HullAntPeriod/2);

SqrtHullAntPeriod = MathFloor(MathSqrt(HullAntPeriod));

//---- inicialização feita

retorno(0);

}

//+------------------------------------------------------------------+

//| Função de desinicialização de indicador personalizada |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

retorno(0);

}

//+------------------------------------------------------------------+

//| Função de iteração de indicador personalizada |

//+------------------------------------------------------------------+

int start()

{

int bar, limit, i;

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(i=0; i<limit; i++)

HullAntBuf=ComputeHull(i);

//----

retorno(0);

}

//+------------------------------------------------------------------+

 

Por que isso não funciona?

int Highest;

double Place;

int Start()

{

Highest=iHighest(Symbol(),0,MODE_HIGH,1,0);Place=iHigh(Symbol(),0,Highest);

if(Gate==0){

if(iClose(Symbol(),0,0)>=Place){

OrderModify(ticket3,Ask,Ask-TrailingStop*Point-Spread,0,0,Green);

Gate=1;}

return(0);

}

Eu recebo erros. Não posso fazer uma simples parada de rastreio!!!!!!!

Razão: