Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1092

 
Reinstallare il sistema operativo. Come ripristinare dopo la reinstallazione del sistema operativo MT4 allo stato in cui si trovava prima della reinstallazione.
Indicatori, EAs, scripts; modelli, profili; conti
 
AlexandrL:
Reinstallare il sistema operativo. Come ripristinare dopo la reinstallazione del sistema operativo MT4 allo stato in cui si trovava prima della reinstallazione.
Indicatori, Expert Advisors, script; modelli, profili; conti
Prima di reinstallare copiate la cartella del terminale su una chiavetta. Se la versione è una 7 o superiore, allora anche la cartella condivisa. Ulteriori dettagli sono disponibili qui
 

Pomeriggio.

Un consigliere basato su un indicatore a freccia.

Vendi sul frattale superiore, compra su quello inferiore. Nel lavoro max. 1 ordine. Ma c'è un errore da qualche parte, perché l'Expert Advisor non tiene conto dei frattali e si apre solo in acquisto. Oppure non si apre affatto (se cambiamo l'offset in iCustom). Ho provato a inserire una condizione diversa nell'Expert Advisor (sul crossover della freccia). Tutto funziona, ma non prende i dati dall'indicatore della freccia.

indicatore:

//+------------------------------------------------------------------+
//|                                                   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);
  }


Codice del gufo:

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;                             
     }

Ho già provato ogni tipo di soluzione, ma non funziona. Per favore, ditemi dov'è l'errore.

File:
 

Buon pomeriggio.

Aiutami a trovare il prezzo di apertura della prima barra di martedì e a fissarlo in modo da poter calcolare da esso tutta la settimana.

Grazie.

 

Ciao, sarei grato se qualcuno potesse dirmi cosa mettere qui in modo che l'EA smetta di aprire gli ordini in sospeso dopo il loro innesco.

//+------------------------------------------------------------------+
//| Copyright © 2014, Khlystov Vladimir |
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#proprietà link "http://cmillion.ru"
#proprietà rigorosa
#property description "Expert Advisor fa trading sulle impennate del mercato senza usare alcun indicatore".
#property description "L'idea dell'Expert Advisor è che gli ordini stop sono spostati discretamente nel tempo a una data distanza dal prezzo corrente."
#property description "Se il prezzo si è mosso abbastanza bruscamente in una direzione, l'EA semplicemente non ha tempo per spostare l'ordine e diventa un ordine a mercato."
#property description "Poi viene attivato un ordine di trall."
//--------------------------------------------------------------------
extern int Stoploss = 10; // Stoploss, se 0, rimane invariato
Takeprofit = 50; //takeprofit, se 0, rimane invariato.
extern int TrailingStop = 10; //lunghezza del tramp, se 0, allora nessun trailing stop
extern int TrailingStart = 0; //quando includere trall, per esempio dopo il raggiungimento di 40 pprofitti.
extern int StepTrall = 2; //tramp step - sposta StopLoss non più vicino a StepTrall
extern int NoLoss = 0, //trasferimento al pareggio ad un numero specificato di punti di profitto, se 0, allora nessun trasferimento al pareggio
MinProfitNoLoss = 0; /profitto minimo per il trasferimento a lossless.
extern int Magic = 77; //magia
extern int Step = 10; //distanza dal prezzo
extern double Lot = 0,1;
extern intern TimeModify = 30; //il numero di secondi prima dei quali è vietato modificare un ordine
extern int slippage = 30; //la massima deviazione di prezzo permessa per gli ordini di mercato (ordini di acquisto e vendita).
//--------------------------------------------------------------------
datetime TimeBarB,TimeBarS;
//--------------------------------------------------------------------
int start()
{
double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
doppio OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
int b=0,s=0,TicketB=0,TicketS=0,OT;
per (int i=0; i<OrdersTotal(); i++)
{
se (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (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 = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits);
se (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits)) SL = StLo;
}
se (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits);
se (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);
else Print("Order Buy Modify SL ",OSL,"->",SL);
}
}
se (OT==OP_SELL)
{
s++;
se ((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits);
se ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits)) SL = StLo;
}
se (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
se (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
}
se ((SL < OSL || OSL==0) && SL!=0)
{
se (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",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)
{
se (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); altrimenti SL=0;
se (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); altrimenti 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)
{
se (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); altrimenti SL=0;
se (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); altrimenti 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)
{
se (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
{
se (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); altrimenti SL=0;
se (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); altrimenti TP=0;
se (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
}
}
se (TicketS!=0)
{
se (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall)
{
se (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); altrimenti SL=0;
se (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); altrimenti TP=0;
se (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
}
}
ritorno(0);
}
//--------------------------------------------------------------------

File:
 
yaaarik777:

Buon pomeriggio.

Aiutami a trovare il prezzo di apertura della prima barra di martedì e a fissarlo in modo da poter calcolare da esso tutta la settimana.

Grazie.

if (DayOfWeek() == 1) Price = iOpen(Symbol(), PERIOD_D1, 4);
if (DayOfWeek() >= 2) Price = iOpen(Symbol(), PERIOD_D1, DayOfWeek() - 2);

 

Sembra che MetaTrader abbia dei glitch: qualcuno ha sperimentato un blocco quando si cerca di inserire una procedura?

Ecco un semplice codice

void OnInit()

{

...

Stampa("Procedura esterna");

StartBuy(Price, Take, Stop, Lot);

...

}

void StartBuy(double Price, double Take, double Stop, double Lot)

{

Stampa("All'interno della procedura");

....

}

Produce una linea Fuori procedura e poi il tester si blocca. Che cos'è?

 
A13ksandr:

Sembra che MetaTrader abbia dei glitch: qualcuno ha sperimentato un blocco quando si cerca di inserire una procedura?

Ecco un semplice codice

void OnInit()

{

...

Stampa("Procedura esterna");

StartBuy(Price, Take, Stop, Lot);

...

}

Smettere di commerciare nell'inite, ecco cosa significa. Quante volte ho detto che ci deve essere un minimo di codice nell'inite con l'esecuzione più veloce, ma c'è sempre qualcuno che è troppo pigro per leggere. Ci sono funzioni standard predefinite per eseguire un programma.

E l'inite è come un int, non un input, con ritorno del motivo di terminazione, a proposito, raccomando di usarlo così.

 
Scarick1:

Ciao, sarei grato se qualcuno potesse dirmi cosa mettere qui in modo che l'EA smetta di aprire gli ordini in sospeso dopo il loro innesco.

//+------------------------------------------------------------------+
//| Copyright © 2014, Khlystov Vladimir |
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#proprietà link "http://cmillion.ru"
#proprietà rigorosa
#property description "Expert Advisor fa trading sulle impennate del mercato senza usare alcun indicatore".
#property description "L'idea dell'Expert Advisor è che gli ordini stop sono spostati discretamente nel tempo a una data distanza dal prezzo corrente."
#property description "Se il prezzo si è mosso abbastanza bruscamente in una direzione, l'EA semplicemente non ha tempo per spostare l'ordine e diventa un ordine a mercato."
#property description "Poi viene attivato un ordine di trall."
//--------------------------------------------------------------------
extern int Stoploss = 10; // Stoploss, se 0, rimane invariato
Takeprofit = 50; //takeprofit, se 0, rimane invariato.
extern int TrailingStop = 10; //lunghezza del tramp, se 0, allora nessun trailing stop
extern int TrailingStart = 0; //quando attivare un trall, per esempio dopo aver raggiunto 40 punti di profitto
extern int StepTrall = 2; //tramp step - sposta StopLoss non più vicino a StepTrall
extern int NoLoss = 0, //trasferimento al pareggio ad un numero specificato di punti di profitto, se 0, allora nessun trasferimento al pareggio
MinProfitNoLoss = 0; /profitto minimo per il trasferimento a lossless.
extern int Magic = 77; //magia
extern int Step = 10; //distanza dal prezzo
extern double Lot = 0,1;
extern intern TimeModify = 30; //il numero di secondi prima dei quali è vietato modificare un ordine
extern int slippage = 30; //la massima deviazione di prezzo permessa per gli ordini di mercato (ordini di acquisto e vendita).
//--------------------------------------------------------------------

datetime TimeBarB,TimeBarS;

TradingAllowed = true;

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

{

b++;

TradingAllowed = false;

se (OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits);
se (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits)) SL = StLo;
}
se (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits);
se (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);
else Print("Order Buy Modify SL ",OSL,"->",SL);
}
}
se (OT==OP_SELL)
{

s++;

TradingAllowed = false;

se ((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits);
se ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
se (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
}
se ((SL < OSL || OSL==0) && SL!=0)
{
se (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",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();}
}
}

}

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

se (b+TicketB==0 && TradingAllowed)
{
se (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); altrimenti SL=0;
se (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); altrimenti 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)
{
se (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); altrimenti SL=0;
se (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); altrimenti 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)
{
se (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
{
se (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); altrimenti SL=0;
se (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); altrimenti TP=0;
se (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
}
}
se (TicketS!=0)
{
se (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall)
{
se (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); altrimenti SL=0;
se (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); altrimenti TP=0;
se (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
}
}
ritorno(0);
}
//--------------------------------------------------------------------

In qualche modo...


 
evillive:

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

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

Scusa! Naturalmente tutto avviene in void OnTick(). Ho scritto io stesso)