Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1092

 
Reinstalando o sistema operacional. Como restaurar após a reinstalação do SO MT4 para o estado em que se encontrava antes da reinstalação.
Indicadores, EAs, scripts; modelos, perfis; contas
 
AlexandrL:
Reinstalando o sistema operacional. Como restaurar após a reinstalação do SO MT4 para o estado em que se encontrava antes da reinstalação.
Indicadores, consultores especializados, scripts; modelos, perfis; contas
Antes de reinstalar, copie a pasta do terminal em um pen drive. Se a versão for uma 7 ou superior, então a pasta compartilhada também. Mais detalhes estão disponíveis aqui
 

Boa tarde.

Um conselheiro baseado em um indicador de seta.

Vender no fractal superior, comprar no fractal inferior. No trabalho no máximo. 1 pedido. Mas há um erro em algum lugar, porque o Expert Advisor não leva em conta os fractais e só abre na compra. Ou não abrirá em absoluto (se mudarmos o offset no iCustom). Eu tentei inserir uma condição diferente no Expert Advisor (no cruzamento da seta). Tudo funciona, mas não retira dados do indicador de seta.

indicador:

//+------------------------------------------------------------------+
//|                                                   MI_Fractal.mq4 |
//|                                                     Орешкин А.В. |
//|                                        http://www.vk.com/mtforex |
//+------------------------------------------------------------------+
#property copyright "Орешкин А.В."
#property link      "http://www.vk.com/mtforex"

#property indicator_chart_window
#property indicator_buffers 2
#property  indicator_color1 Aqua
#property  indicator_color2 Yellow
#property  indicator_width1 2
#property  indicator_width2 2

//--- input parameters
extern int       leftBars=10;
extern int       rightBars=2;
extern int       difference=10;
//extern int       maximumBars=1000;
extern bool      showUp=true;
extern bool      showDown=true;

bool  UP_Fractal,DOWN_Fractal;
double DEF,up[],down[];

int init()
  {
   DEF=NormalizeDouble(difference*Point,Digits);
   SetIndexBuffer(0,up);
   SetIndexBuffer(1,down);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);    
   SetIndexArrow(0,217);
   SetIndexArrow(1,218);
   return(0);
  }

int deinit(){return(0);}

int start()
  {   
   //for (int i=maximumBars;i>rightBars;i--)
   for (int i=Bars-IndicatorCounted()-leftBars-1;i>rightBars;i--)   
      {//3
      UP_Fractal=true;DOWN_Fractal=true;
      
      for (int x=i+leftBars;x>=i-rightBars;x--)
         {//0
         if (x==i) continue;
         if (High[i]-High[x]<DEF) UP_Fractal=false;
         if (Low[x]-Low[i]<DEF) DOWN_Fractal=false;
         }//0
      
      up[i]=EMPTY;
      down[i]=EMPTY;
      
      if (showUp)   
         if (UP_Fractal && !DOWN_Fractal) up[i]=High[i];
      
      if (showDown)   
         if (!UP_Fractal && DOWN_Fractal) down[i]=Low[i]; 
      }//3
   return(0);
  }


Código da coruja:

double upFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,0,1);
double downFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,1,1); 
     
   if (upFr!=EMPTY_VALUE)   
   //if (upFr<2) 
   //if (upFr>0)    
     {   
                                          
      Alert(upFr); 
      Opn_S=true;                             
      //Cls_B=true;                                
     }
 if (downFr!=EMPTY_VALUE)
   //if (downFr<2)
 //  if (downFr>0)                                              
     {                                         
     Opn_B=true;                              
     //Cls_S=true;                             
     }

Já experimentou todo tipo de soluções diferentes, não está funcionando. Por favor, diga-me onde está o erro.

Arquivos anexados:
 

Boa tarde.

Ajude-me a encontrar o preço de abertura do primeiro bar na terça-feira e conserte-o para que eu possa calcular a partir dele durante toda a semana.

Obrigado.

 

Olá, eu ficaria grato se alguém pudesse me dizer o que colocar aqui para que a EA pare de abrir ordens pendentes depois que elas acionarem.

//+------------------------------------------------------------------+
//| Copyright © 2014, Khlystov Vladimir |
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#direitos autorais "Copyright © 2014, cmillion@narod.ru"
#link da propriedade "http://cmillion.ru"
#propriedade rigorosa
#Descrição da propriedade "Expert Advisor" negocia em surtos de mercado sem utilizar nenhum indicador".
#Descrição da propriedade "A idéia do Consultor Especialista é que as ordens de parada sejam movidas discretamente no tempo a uma determinada distância do preço atual".
#descrição do imóvel "Se o preço se movimentou o suficiente em uma direção, a EA simplesmente não tem tempo para mover a ordem e ela se torna uma ordem de mercado".
#descrição da propriedade "Então uma ordem de venda é acionada".
//--------------------------------------------------------------------
Externo int Stoploss = 10; // Stoploss, se 0, permanece inalterado
Takeprofit = 50; //takeprofit, se 0, permanece inalterado.
TrailingStop externo int = 10; // comprimento do trailingStop, se 0, então sem trailingStop
TrailingStart int externo = 0; // quando para ativar um trall, por exemplo, depois de atingir 40 pontos de lucro
StepTrall = 2; // Steptramp - move StopLoss não mais perto do que StepTrall
externo int NoLoss = 0, //transferência para o Breakeven em um número especificado de pontos de lucro, se 0, então nenhuma transferência para o Breakeven
MinProfitNoLoss = 0; //minuto lucro mínimo para a transferência para sem perdas.
magia int externa = 77; //magrégia
Passo int externo = 10; //distância do preço
Lote duplo externo = 0,1;
tempo interno externo TimeModify = 30; // o número de segundos antes do qual é proibido modificar uma ordem
escorregamento interno externo = 30; // desvio máximo permitido de preço para ordens de mercado (ordens de compra e venda).
//--------------------------------------------------------------------
data/hora TimeBarB,TimeBarS;
//--------------------------------------------------------------------
int start()
{
duplo STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
duplo OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
int b=0,s=0,TicketB=0,TicketS=0,OT;
para (int i=0; i<OrdersTotal(); i++)
{
se (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
se (OrderSymbol()==Symbol() && Magic===OrderMagicNumber())
{
OT = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;
se (OT===OP_BUY)
{
b++;
se (OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDuplo(OOP+MinProfitNoLoss*Point,Dígitos);
if (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Ponto,Dígitos)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Ponto >= TrailingStart)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Dígitos);
if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
}
se (SL > OSL)
{
se (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(), "Order Modify Buy SL ",OSL,"->",SL);
ou imprimir ("Order Buy Modify SL ",OSL,"->",SL);
}
}
se (OT===OP_SELL)
{
s++;
if ((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDuplo(OOP-MinProfitNoLoss*Point,Dígitos);
if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Ponto,Dígitos)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Ponto >= TrailingStart)
{
StLo = NormalizeDouble(Pergunte + TrailingStop*Point,Dígitos);
if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
}
if ((SL < OSL || OSL==0) && SL!=0)
{
se (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Imprimir("Erro ",GetLastError(), "Order Modify Sell SL ",OSL,"->",SL);
else Print("Order Sell Modify SL ",OSL,"->",SL);
}
}
if (OT===OP_BUYSTOP) {PriceB=OOP; TicketB=OrderTicket();}
if (OT===OP_SELLSTOP) {PriceS=OOP; TicketS=OrderTicket();}
}
}
}
se (b+TicketB==0)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Ponto,Dígitos); caso contrário SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Ponto,Dígitos); caso contrário TP=0;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent();
}
se (s+TicketS==0)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Ponto,Dígitos); caso contrário SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Ponto,Dígitos); caso contrário TP=0;
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
}
se (TicketB!=0)
{
if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step *Ponto,Dígitos)-PriceB)/Ponto>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Ponto,Dígitos); caso contrário SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Ponto,Dígitos); caso contrário TP=0;
if (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
}
}
se (TicketS!=0)
{
if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Passo * Ponto,Dígitos)-PreçoS)/Ponto>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Ponto,Dígitos); caso contrário SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Ponto,Dígitos); caso contrário TP=0;
if (OrderModify(TicketS,NormalizeDouble(Bid - Passo * Ponto,Dígitos),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
}
}
retorno(0);
}
//--------------------------------------------------------------------

Arquivos anexados:
 
yaaarik777:

Boa tarde.

Ajude-me a encontrar o preço de abertura do primeiro bar na terça-feira e conserte-o para que eu possa calcular a partir dele durante toda a semana.

Obrigado.

if (DayOfWeek() == 1) Preço = iOpen(Symbol(), PERÍODO_D1, 4);
if (DayOfWeek() >= 2) Preço = iOpen(Symbol(), PERIOD_D1, DayOfWeek() - 2);

 

Parece que há falhas no MetaTrader: alguém já passou por uma falha ao tentar entrar em um procedimento?

Aqui está um código simples

nulo OnInit()

{

...

Imprimir("Procedimento externo");

StartBuy(Preço, Take, Stop, Lote);

...

}

StartBuy nulo(preço duplo, Take duplo, Stop duplo, Lote duplo)

{

Imprimir ("Inside procedure");

....

}

Produz uma linha Procedimento externo e depois o testador fica pendurado. O que é isso?

 
A13ksandr:

Parece que há falhas no MetaTrader: alguém já passou por uma falha ao tentar entrar em um procedimento?

Aqui está um código simples

nulo OnInit()

{

...

Imprimir ("Procedimento externo");

StartBuy(Preço, Take, Stop, Lote);

...

}

Parar de negociar no inite, é isso que significa. Quantas vezes eu já disse que o inite deve ter um mínimo de código com o término de execução mais rápido, mas ainda há alguém que é preguiçoso demais para ler. Existem funções padrão pré-definidas para executar um programa.

E o inite é como uma int, não um input, com retorno do motivo da rescisão, a propósito, recomendo usá-lo dessa forma.

 
Scarick1:

Olá, eu ficaria grato se alguém pudesse me dizer o que colocar aqui para que a EA pare de abrir ordens pendentes depois que elas acionarem.

//+------------------------------------------------------------------+
//| Copyright © 2014, Khlystov Vladimir |
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#direitos autorais "Copyright © 2014, cmillion@narod.ru"
#link da propriedade "http://cmillion.ru"
#propriedade rigorosa
#Descrição da propriedade "Expert Advisor" negocia em surtos de mercado sem utilizar nenhum indicador".
#Descrição da propriedade "A idéia do Consultor Especialista é que as ordens de parada sejam movidas discretamente no tempo a uma determinada distância do preço atual".
#descrição do imóvel "Se o preço se movimentou o suficiente em uma direção, a EA simplesmente não tem tempo para mover a ordem e ela se torna uma ordem de mercado".
#descrição da propriedade "Então uma ordem de venda é acionada".
//--------------------------------------------------------------------
Externo int Stoploss = 10; // Stoploss, se 0, permanece inalterado
Takeprofit = 50; //takeprofit, se 0, permanece inalterado.
TrailingStop externo int = 10; // comprimento do trailingStop, se 0, então sem trailingStop
TrailingStart externo int = 0; // quando incluir trall, por exemplo, após a realização de 40 pprofit
StepTrall = 2; // Steptramp - move StopLoss não mais perto do que StepTrall
externo int NoLoss = 0, //transferência para o Breakeven em um número especificado de pontos de lucro, se 0, então nenhuma transferência para o Breakeven
MinProfitNoLoss = 0; //minuto lucro mínimo para a transferência para sem perdas.
magia int externa = 77; //magrégia
Passo int externo = 10; //distância do preço
Lote duplo externo = 0,1;
tempo interno externo TimeModify = 30; // o número de segundos antes do qual é proibido modificar uma ordem
escorregamento interno externo = 30; // desvio máximo permitido de preço para ordens de mercado (ordens de compra e venda).
//--------------------------------------------------------------------

data/hora TimeBarB,TimeBarS;

TradingAllowed = verdadeiro;

//--------------------------------------------------------------------
int start()
{
duplo STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
duplo OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
int b=0,s=0,TicketB=0,TicketS=0,OT;
para (int i=0; i<OrdersTotal(); i++)
{
se (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
se (OrderSymbol()==Symbol() && Magic===OrderMagicNumber())
{
OT = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;
se (OT===OP_BUY)

{

b++;

TradingAllowed = falso;

se (OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDuplo(OOP+MinProfitNoLoss*Point,Dígitos);
if (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Ponto,Dígitos)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Ponto >= TrailingStart)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Dígitos);
if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
}
se (SL > OSL)
{
se (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(), "Order Modify Buy SL ",OSL,"->",SL);
ou imprimir ("Order Buy Modify SL ",OSL,"->",SL);
}
}
se (OT===OP_SELL)
{

s++;

TradingAllowed = falso;

if ((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDuplo(OOP-MinProfitNoLoss*Point,Dígitos);
if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Ponto,Dígitos)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Ponto >= TrailingStart)
{
StLo = NormalizeDouble(Pergunte + TrailingStop*Point,Dígitos);
if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
}
if ((SL < OSL || OSL==0) && SL!=0)
{
se (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Imprimir("Erro ",GetLastError(), "Order Modify Sell SL ",OSL,"->",SL);
else Print("Order Sell Modify SL ",OSL,"->",SL);
}
}
if (OT===OP_BUYSTOP) {PriceB=OOP; TicketB=OrderTicket();}
if (OT===OP_SELLSTOP) {PriceS=OOP; TicketS=OrderTicket();}
}
}

}

se (b == 0 && s == 0) TradingAllowed = true;

se (b+TicketB==0 && TradingAllowed)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Ponto,Dígitos); caso contrário SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Ponto,Dígitos); caso contrário TP=0;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent();
}
se (s+TicketS==0 && TradingAllowed)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Ponto,Dígitos); caso contrário SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Ponto,Dígitos); caso contrário TP=0;
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
}
se (TicketB!=0)
{
if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step *Ponto,Dígitos)-PriceB)/Ponto>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Ponto,Dígitos); caso contrário SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Ponto,Dígitos); caso contrário TP=0;
if (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
}
}
se (TicketS!=0)
{
if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Passo * Ponto,Dígitos)-PreçoS)/Ponto>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Ponto,Dígitos); caso contrário SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Ponto,Dígitos); caso contrário TP=0;
if (OrderModify(TicketS,NormalizeDouble(Bid - Passo * Ponto,Dígitos),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
}
}
retorno(0);
}
//--------------------------------------------------------------------

De alguma forma...


 
evillive:

Отставить торговать в ините, вот что значит. Сколько уже повторяли что в ините должен быть минимум кода с максимально быстрым завершением исполнения, всё равно найдется кто-нибудь, кому лень читать. Есть же стандартные предопределенные функции для работы программы.

Да и инит типа инт, а не войд, с возвратом причины прекращения работы, между прочим, рекомендую так им и пользоваться. 

Desculpe! É claro que tudo acontece no vazio OnTick(). Eu mesmo escrevi)
Razão: