Como codificar? - página 186

 

Muito bem, sobre a pergunta original:

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 Magenta

extern int MAPeriod=200;

extern double iController = 1.386;

//---- buffers

//double Memory[200];

double ExtMapBuffer1[];

int limit = 200;

//---- variables

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

//| Custom indicator initialization function |

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

int init()

{

IndicatorBuffers(1);

//---- drawing settings

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);

IndicatorShortName( "Antaria_Rising");

//---- initialization done

return(0);

}

int start()

{

int limit;

//ExtMapBuffer1[1] = ExtMapBuffer1[0];

//ExtMapBuffer1[0] = iController;

for(int i=(0); i<=(limit-1); i++)

{

ExtMapBuffer1 = ExtMapBuffer1;

}

ExtMapBuffer1[0] = iController;

return(0);

}[/CODE]

Above is the code for the indicator. Simply, it draws a line that should be updatable via the EA using the intiially mentioned code:

[CODE]temp = iCustom(NULL, 0, "AntariaRising", 200, 1.2, 0, 0); //temp not used. Function returns a double

Acho que quero substituir a última parte do código que realmente me permite atualizar no objeto incicador a variável que está sendo rastreada, para que eu possa usá-la mais tarde como uma linha de parada. O código restante, porém, é irrelevante. Quando eu executo a função acima, espero que a antaria se mova de 1,39 ou o que quer que ela comece, para 1,2. Não consigo me lembrar se uso a variável 200. Acho que cortei meus comentários de cabeçalho e rodapé, mas todo o indicador de escravo está lá em cima, o que é AntariaRising significando imediatamente acima do código

esta foi a única função que pude encontrar que falava com objetos indicadores, e a utilizo para ler valores em outras áreas.

 

Sobre seu código indicador. Está errado.

Limite Var. igual a zero sempre.

Tire a corda:

limite de int;

desde o início().

 

Ajude-me com este código pls

eu quero que alguém me ajude com este código ele abre o comércio quando eu quero, mas fecha-o automaticamente, então eu quero que ele negocie com stop loss não fechando quando não cruzar novamente este é o código

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

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

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

#propriedade copyright "oneLove

#link da propriedade "https://www.forex-tsd.com"

//---- parâmetros de entrada

duplo TakeProfit externo=250,0;

duplo externo Lots=0,1;

duplo Exterior TrailingStop=35.0;

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

//| função de iniciação de especialista |

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

int init()

{

//----

//----

retorno(0);

}

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

//| função de desinicialização especializada |

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

int deinit()

{

//----

//----

retorno(0);

}

int Crossed (linha dupla1 , linha dupla2)

{

estática int última_direção = 0;

int estática corrente_direção estática = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //change

{

última_direção = direção_corrente;

retorno (última_direção);

}

senão

{

retorno (0);

}

}

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

//| função de início especializado |

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

int start()

{

//----

int cnt, bilhete, total;

duplo curtoEma, longoEma;

if(Bars<100)

{

Impressão ("barras com menos de 100");

retornar(0);

}

if(TakeProfit<10)

{

Imprimir ("TakeProfit menos de 10");

retornar(0); // verificar TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdensTotal();

if(total < 1)

{

if(isCrossed == 1)

{

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

"Minha EA",12345,0,Verde);

if(bilhete>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Imprimir("Pedido aberto : ",OrderOpenPrice());

}

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

retornar(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,

Bid-TakeProfit*Point, "My EA",12345,0,Red);

if(bilhete>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Imprimir("Pedido de venda aberto : ",OrderOpenPrice());

}

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

retornar(0);

}

retorno(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // posição longa é aberta

{

// deve ser fechado?

if(isCrossed == 2)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

// posição fechada

retornar(0); // sair

}

// verificar a parada de trilha

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

retorno(0);

}

}

}

}

senão // ir para a posição curta

{

// deve ser fechado?

if(isCrossed == 1)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

// posição fechada

retornar(0); // sair

}

// verificar a parada de trilha

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

retorno(0);

}

}

}

}

}

}

retorno(0);

}

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

 

Tente isto:

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

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

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

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

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

Obrigado

Roger09:
Tente isto:
//+------------------------------------------------------------------+

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

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

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

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

graças roger09 Deus te abençoe

 

Graças a Roger, removi essa segunda declaração de limite desde minha função inicial. Estou surpreso que o compilador tenha permitido essa declaração, mas ela não havia afetado meu programa de forma perceptível.

Ainda não tenho certeza de como alterar a instância de execução daquele indcator do meu EA. Um método seria muito apreciado, ou pelo menos a confirmação de que a API não me permite atualmente passar informações para os indicadores em execução.

Obrigado.

 
yingli:
Estou aprendendo a codificar o indicador anexado, mas não funcionou. Alguém poderia ajudar? É um indicador muito confiável e se alguém pudesse fazer um EA para ele... é quase um santo graal.tia.

O preço básico é:

1.abrir Posição de venda quando a seta vermelha aparece,

2 abrir posição de compra quando a seta branca aparecer e fechar automaticamente todas as posições/ posições de venda.

3.aplicar para qualquer período de tempo .

4.sem perda de parada,

5.adicionar função de ordem.

Aguarde a resposta!

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

//| IINWMARROWS.mq4 |

//| Baseado em EMA_CROSS.mq4 |

//| Copyright ?2006, MetaQuotes Software Corp. |

//| Software de Comércio Forex: Plataforma de negociação Forex MetaTrader 4 |

//| Última pequena modificação por Iin Zulkarnain |

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

#Copyright ?2006, MetaQuotes Software Corp."

#link da propriedade "http://www.metaquotes.net"

//----

#janela_do_cartão_indicador de propriedade

#property indicator_buffers 2

#Indicador de propriedade_color1 Branco

#indicador de propriedade_color2 Vermelho

#largura_do_indicador de propriedade1 2

#largura_do_indicador de propriedade2 2

//----

duplo CrossUp[];

duplo CrossDown[];

externo int FasterMode=3; //0=sma, 1=ema, 2=smma, 3=lwma

externo int FasterMA= 3;

extern int SlowerMode=3; //0=sma, 1=ema, 2=smma, 3=lwma

externo int SlowerMA= 3;

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

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

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

int init()

{

//---- indicadores

SetIndexStyle(0, DRAW_ARROW, EMPTY);

SetIndexArrow(0, 233);

SetIndexBuffer(0, CrossUp);

SetIndexStyle(1, DRAW_ARROW, EMPTY);

SetIndexArrow(1, 234);

SetIndexBuffer(1, CrossDown);

//----

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 limit, i, counter;

duplo mais rápidoMAnovem, mais lentoMAnovem, mais rápidoMAnovem, mais lentoMAafter, mais lentoMAafter;

alcance duplo, AvgRange;

int counted_bars=IndicatorCounted();

//---- verificação de possíveis erros

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

//---- última barra contada será contada novamente

if(counted_bars>0) counted_bars--;

//----

limite=barras_contadas_combarras;

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

{

counter=i;

Faixa=0;

AvgRange=0;

for(counter=i ;counter<=i+9;counter+++)

{

AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);

}

Alcance=AvgRange/10;

fasterMAnow=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i);

fasterMAprevious=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i+1);

fasterMAafter=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i-1);

//----

slowerMAnow=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i);

slowerMAprevious=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i+1);

slowerMAafter=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i-1);

if ((fasterMAnow > slowerMAnow) && (fasterMAprevious slowerMAafter))

{

CrossUp=Baixo - Alcance*0,5;

}

senão se ((fasterMAnow slowerMAprevious) && (fasterMAafter < slowerMAafter))

{

CrossDown=Alto + Alcance*0,5;

}

}

retorno(0);

}

//+------------------------------------------------------------------+ este tópico para aprender a codificar corretamente, estou aprendendo a codificar para

Qualquer um poderia ajudar a codificar um alerta para este indicador, é realmente legal.

 

George's Oscar Calculator - Qualquer pessoa pode codificar um indicador para isso?

Olá, pessoal,

Não sei se alguém está familiarizado com o Forex Made-EZ de George Smith.

Estou atualmente revendo seu trabalho e me pergunto se alguém codificou um indicador para o oscilador Oscar que ele usa?

A fórmula é

let A = a maior altura das últimas oito barras (incluindo esta)

let B = a mais baixa das últimas oito barras (incluindo esta)

let C = preço atual de fechamento das barras

let X = a figura do oscilador anterior (Oscar)

O oscilador "bruto" de hoje é igual a (C-B) dividido por (A-B) vezes 100.

Em seguida, "suavizamos" nosso número aproximado (vamos chamá-lo de Y) assim:

Número final do oscilador = ((X dividido por 3) vezes 2), mais (Y dividido por 3).

Se alguém já codificou isto ou pode codificar isto, seria muito apreciado.

Cumprimentos a Steve

 

Parada de trilha invertida

Hi,

Quero alguma ajuda com uma idéia.

Estou usando as paradas de arraste em meus EAs (3 passos de arraste), mas quero fazer a coisa invertida para proteger as perdas.

Vou tentar explicar:

Eu abro uma ordem, com uma parada inicial de perda.

Se a troca for 15 pips na direção da perda e voltar 10 pips, feche a troca (primeiro passo).

Se a troca for 30 pips na direção da perda e voltar 15 pips, feche a troca (segundo passo).

Algo parecido com isto.

Obrigado pela ajuda.

 
dedreko:
Hi,

Quero alguma ajuda com uma idéia.

Estou usando as paradas de arraste em meus EAs (3 passos de arraste), mas quero fazer a coisa invertida para proteger as perdas.

Vou tentar explicar:

Eu abro uma ordem, com uma parada inicial de perda.

Se a troca for 15 pips na direção da perda e voltar 10 pips, feche a troca (primeiro passo).

Se a troca for 30 pips na direção da perda e voltar 15 pips, feche a troca (segundo passo).

Algo parecido com isto.

Obrigado pela ajuda

Isto é algo novo para mim.

Então, o fechamento da troca perdedora sempre precisa esperar até que ela salte para trás, certo?

Que tal se não ressaltar?

Vamos fechar no SL incial?