double ATR_Max() {
int i;
double m;
datetime tim;
iATR_H1_PER = 15;// периодif ( tim != Time[0] ) {
while( i < WindowBarsPerChart() ) {
double a = iATR( NULL, 0, iATR_H1_PER, i );
if ( m < a ) {
m = a;
}
i++;
tim = Time[0];
}
}
Alert( " Максимальное значение ATR для видимого количества баров равно - ", m );
return(m);
}
Boeing747 : Acho que Tim = Time[0] seria melhor colocado depois do loop ...porque pedir Time[0] é feito em todo o número de barras visíveis - não é racional.
Obrigado pela correção. O número de erros cresce exponencialmente à noite))))
Boa tarde. Você sabe se é possível alterar os parâmetros indicadores em mql4? A idéia é simples: o indicador ZigZag está instalado no gráfico. O roteiro deve ser escrito e a tecla de atalho deve ser afixada a ele. Ao pressioná-lo, os parâmetros em ziguezague serão alterados no gráfico.
Assim, a função verifica os valores das duas barras anteriores e, se forem muito grandes, retorna VERDADEIRO. A questão é como melhorá-la: fazer esta função procurar velas grandes em mais velas. Por exemplo, 24.
satorifx : Boa tarde. Você sabe se é possível alterar os parâmetros indicadores em mql4? A idéia é simples: o indicador ZigZag está instalado no gráfico. O roteiro deve ser escrito e a tecla de atalho deve ser anexada a ele. Assim que eu pressioná-lo, os parâmetros ZigZag mudarão no gráfico.
Fiz um Expert Advisor caseiro para testar o comércio, mas não consigo descobrir uma coisa...
A baía/venda é aberta usando o máximo e mínimo MAs
// Condição para abrir posição de compra if(MA_L1<MA_L0&&Ask<=MA_L0&MA_0>MA_1&&HA_up>HA_dw)
// Condição para abrir uma posição de VENDA if(MA_H1>MA_H0&&&Bid>=MA_H0&MA_0<MA_1&HA_up<HA_dw)
#include <b-Lots.mqh>externdouble TrailingStop = 30;
externdouble Sploss = 15;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start() {
double HA_up,HA_dw;
double MA_H0,MA_H1,MA_L0,MA_L1,MA_0,MA_1;
int i, cnt, ticket, total;
bool flag=true;
if(Bars<100) {
Print("bars less than 100");
return(0);
}
// Проверяем стоит ли открываться
cnt=OrdersHistoryTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )) continue;
if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
flag=false;
break;
}
}
cnt=OrdersTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
flag=false;
break;
}
}
if(!flag) return(0);
//-----------------------------------------------
MA_H0=iMA(0,0,3,0,MODE_SMA,PRICE_HIGH,0);
MA_H1=iMA(0,0,3,0,MODE_SMA,PRICE_HIGH,1);
MA_0=iMA(0,0,3,0,MODE_EMA,PRICE_MEDIAN,0);
MA_1=iMA(0,0,3,0,MODE_EMA,PRICE_MEDIAN,1);
MA_L0=iMA(0,0,3,0,MODE_SMA,PRICE_LOW,0);
MA_L1=iMA(0,0,3,0,MODE_SMA,PRICE_LOW,1);
HA_up=iCustom(0,0,"Heiken Ashi",3,0);
HA_dw=iCustom(0,0,"Heiken Ashi",2,0);
//задали все данные
total=OrdersTotal();
if(total<1)
{
// Проверка свободной маржиif(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// Условие открытие позиции BUYif(MA_L1<MA_L0&&Ask<=MA_L0&&MA_0>MA_1&&HA_up>HA_dw)
{
Lots=GetSizeLot();
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Bid-Sploss*Point,0,"",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
elsePrint("Error opening BUY order : ",GetLastError());
return(0);
}
// Условие открытие позиции SELLif(MA_H1>MA_H0&&Bid>=MA_H0&&MA_0<MA_1&&HA_up<HA_dw)
{
Lots=GetSizeLot();
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Ask+Sploss*Point,0,"",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
elsePrint("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) // длинная позиция открыта
{
if(NormalizeDouble (MathAbs(MA_H0-Bid),Digits)<Point)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
return(0);
}
// трейлинг-стоп для длинной позиции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
{
if(NormalizeDouble (MathAbs(MA_L0-Ask),Digits)<Point)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
return(0);
}
// трейлинг-стоп для короткой позиции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);
}
Pergunta: Se a posição na vela atual não estiver fechada (as condições não chegaram), como fechá-la na próxima vela, quando ela corresponder a MA_0= iMA ( 0, 0, 3, 0, MODE_EMA, PRICE_MEDIAN, 0 );
Temos uma condição de fechamento: cruzar o alto ou o baixo da vela atual, mas precisamos da posição para fechar na próxima vela depois que ela for aberta.
Podemos escrever se ( NormalizeDouble ( MathAbs (MA_0-Ask), Dígitos )< Ponto ), mas como preencher a condição da segunda vela aberta.
Se você puder responder com código, o exemplo é mais claro.
Você realmente precisa ser um espertalhão para entender que se uma nova pessoa chega ao fórum com uma pergunta, ela precisa de uma solução específica ou um link para algo semelhante, não uma desculpa idiota de que "tudo é possível"?
Você realmente precisa ser um espertalhão para entender que se uma nova pessoa chega ao fórum com uma pergunta, ela precisa de uma solução específica ou um link para algo semelhante, não uma desculpa idiota de que "tudo é possível"?
As pessoas que estão tentando fazer algo por conta própria conseguem ajuda aqui. Eles o guiam na direção certa, explicam, etc. ...
Você fez uma pergunta e obteve uma resposta. Você mesmo já tentou começar a escrever alguma coisa?
Ao fazer uma pergunta em um determinado formato, primeiro pense que tipo de resposta você chegará ao formato da pergunta...
Portanto, esperemos que a forma final da função.
Portanto, esperemos que a forma final da função.
Portanto, esperemos que a forma final da função.
Acho que Tim = Time[0] seria melhor colocado depois do loop ...porque pedir Time[0] é feito em todo o número de barras visíveis - não é racional.
Obrigado pela correção. O número de erros cresce exponencialmente à noite))))
A idéia é simples: o indicador ZigZag está instalado no gráfico. O roteiro deve ser escrito e a tecla de atalho deve ser afixada a ele. Ao pressioná-lo, os parâmetros em ziguezague serão alterados no gráfico.
Continuando o tópico atual de encontrar um filtro de alta volatilidade. Aqui está o código de um filtro existente da WSR
int init()
Aqui está a própria função:
Assim, a função verifica os valores das duas barras anteriores e, se forem muito grandes, retorna VERDADEIRO. A questão é como melhorá-la: fazer esta função procurar velas grandes em mais velas. Por exemplo, 24.
Boa tarde. Você sabe se é possível alterar os parâmetros indicadores em mql4?
A idéia é simples: o indicador ZigZag está instalado no gráfico. O roteiro deve ser escrito e a tecla de atalho deve ser anexada a ele. Assim que eu pressioná-lo, os parâmetros ZigZag mudarão no gráfico.
Fiz um Expert Advisor caseiro para testar o comércio, mas não consigo descobrir uma coisa...
Pergunta: Se a posição na vela atual não estiver fechada (as condições não chegaram), como fechá-la na próxima vela, quando ela corresponder a MA_0= iMA ( 0, 0, 3, 0, MODE_EMA, PRICE_MEDIAN, 0 );A baía/venda é aberta usando o máximo e mínimo MAs
// Condição para abrir posição de compra
if(MA_L1<MA_L0&&Ask<=MA_L0&MA_0>MA_1&&HA_up>HA_dw)
// Condição para abrir uma posição de VENDA
if(MA_H1>MA_H0&&&Bid>=MA_H0&MA_0<MA_1&HA_up<HA_dw)
Temos uma condição de fechamento: cruzar o alto ou o baixo da vela atual, mas precisamos da posição para fechar na próxima vela depois que ela for aberta.
Podemos escrever se ( NormalizeDouble ( MathAbs (MA_0-Ask), Dígitos )< Ponto ), mas como preencher a condição da segunda vela aberta.
Se você puder responder com código, o exemplo é mais claro.
Existe essa possibilidade.
Obrigado pela resposta incrivelmente detalhada.
Você realmente precisa ser um espertalhão para entender que se uma nova pessoa chega ao fórum com uma pergunta, ela precisa de uma solução específica ou um link para algo semelhante, não uma desculpa idiota de que "tudo é possível"?
Obrigado pela resposta incrivelmente detalhada.
Você realmente precisa ser um espertalhão para entender que se uma nova pessoa chega ao fórum com uma pergunta, ela precisa de uma solução específica ou um link para algo semelhante, não uma desculpa idiota de que "tudo é possível"?
As pessoas que estão tentando fazer algo por conta própria conseguem ajuda aqui. Eles o guiam na direção certa, explicam, etc. ...
Você fez uma pergunta e obteve uma resposta. Você mesmo já tentou começar a escrever alguma coisa?
Ao fazer uma pergunta em um determinado formato, primeiro pense que tipo de resposta você chegará ao formato da pergunta...