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
[Excluído]  
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)