Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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);
} // startMas 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?
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
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
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,
MarkusOlá. 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?
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!!!!!!!