[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 863

 
IgorM:

qual è il modo migliore per salvare dati/variabili importanti nel caso in cui il terminale si blocchi (mancanza di corrente)?

- variabili globali del terminale? in un file?

- quanto spesso devono essere salvati? (l'ultimo valore di equità e alcune boole sono importanti)

Qual è il problema, tutto in un array, e l'array in un file ad ogni tick, leggere il file nell'inizializzazione, e nessun problema
 

Ciao!

Non riesco a capire perché non posso modificare una posizione aperta, ho digitato l'ordine (nella funzione order select)

//+------------------------------------------------------------------+
|| Notizie commerciali.mq4
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp.
#proprietà link "http://www.metaquotes.net"


extern bool In_BUYSTOP=true;
extern intProfit_buy=100;
extern int StopLoss_buy=5;
extern double Lots_buy=0.01;
//+------------------------------------------------------------------+
extern bool In_SELLSTOP =true;
extern inttern TakeProfit_sell=100;
extern int StopLoss_sell =5;
extern double Lots_sell =0.01;
extern int LevelProfit = 25; // - Livello di profitto in punti, che è necessario raggiungere per trasferire il suo stop al livello di Breakeven.
extern int LevelWLoss = 1; // - Livello di pareggio in punti, al quale la posizione di stop sarà spostata dopo che il suo profitto raggiunge il livello LevelProfit in punti.

//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point); // BUY
int profitsell=((OrderOpenPrice()- Ask)/Point); // SELL
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int start()
//----
{
biglietto int;
se (Bid >iHigh(NULL,PERIOD_D1,1))
{
se(OrdiniTotali() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point,Hour() == 21 && Minute() == 59)
}
se (Ask <iLow(NULL,PERIOD_D1,1))
{
se(OrdiniTotali() < 1)
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots_buy,iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point,iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point,Hour() == 21 && Minute() == 59)
}
//oooooooooooooooooooooooooooooooooooooooooooooo
ritorno(0);
}
//+------------------------------------------------------------------+
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
int order_type=OrderType();
order_type=OP_SELL;
int profitsell=((OrderOpenPrice()- Ask)/Point);
se (profitsell>5)
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue);
ritorno(0);
}
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
order_type=OP_BUY;
int profitbuy=((Bid - OrderOpenPrice())/Point);
se (profitbuy>5)
int stopmodify=OrderOpenPrice();
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue);
ritorno(0);
}
 

Cari sviluppatori, una domanda per voi.

Non riesco a far funzionare correttamente la variabile globale dell'indicatore quando chiamo l'indicatore da un Expert Advisor.

Ecco il codice dell'indicatore (solo le stringhe che sono importanti per capire la domanda).

double  price;
double  PriceBuffer[];

int init()
{
   SetIndexBuffer(0,PriceBuffer);
   return(0);
}
int start()
{
   int limit, i;
   int counted_bars=IndicatorCounted();
   
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(i=limit-1; i>=0; i--)
   {
        PriceBuffer[i] = price;
        price = iClose(NULL,0,i);
   }
   return(0);
}

Ad ogni barra salva il prezzo corrente nella variabile globale price e lo visualizza nella barra successiva. Così, dovremmo vedere il grafico del prezzo ritardato di una barra. Se attacchiamo l'indicatore al grafico, tutto funziona correttamente:

Ma se questo indicatore viene chiamato dall'EA ed esegue un test visivo, vedremo alla fine del test: l'indicatore è solo leggermente simile a quello che dovrebbe essere.

Se ora ricalcoliamo l'indicatore sul grafico di test visivo (per esempio, aprendo e chiudendo le sue proprietà), tutto torna alla normalità - vediamo di nuovo la prima immagine.

Cosa sto facendo di sbagliato?

Ho fatto una ricerca, ma non ho trovato nessuna risposta.

Uso MT4 Versione 4.00 Build 226.

 
Penso che sia perché non ci sono abbastanza zecche nella storia. Ecco perché manca. In tempo reale tutto dovrebbe essere chiaro! ;)
 

Ciao, per favore consiglia dove nel codice c'è l'imprecisione, dato che c'è un tale errore nel log quando lo script è in esecuzione:

15:40:29 11dP_real_symbol EURUSD,H4: <--- 2 grafici corretti trovati. --->

15:40:29 11dP_real_symbol EURUSD,H4: <--- Per vedere i risultati, aprire il grafico EURUSD,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4: il nome del simbolo per la funzione MarketInfo deve essere una stringa

15:40:29 11dP_real_symbol: parametro stringa vuoto per la funzione FileWriteString

15:40:29 11dP_real_symbol EURUSD,H4: il nome del simbolo per la funzione MarketInfo deve essere una stringa

15:40:29 11dP_real_symbol EURUSD,H4: <--- Per vedere i risultati, aprire i grafici,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4: il primo parametro per la funzione WindowHandle deve essere una stringa inizializzata

15:40:30 11dP_real_symbol EURUSD,H4: il primo parametro per la funzione WindowHandle deve essere una stringa inizializzata

15:40:31 11dP_real_symbol EURUSD,H4: il primo parametro per la funzione WindowHandle deve essere una stringa inizializzata

Sto allegando il codice da solo qui sotto:

File:
11dp.mq4  15 kb
 
IgorM:

qual è il modo migliore per salvare dati/variabili importanti nel caso in cui il terminale si blocchi (mancanza di corrente)?

- variabili globali del terminale? in un file?

- quanto spesso devono essere salvati? (l'ultimo valore di equità e alcune boole del consigliere sono importanti)


A differenza di altre variabili, una variabile GV non solo può essere creata da qualsiasi programma, ma può anche essere cancellata. Il valore della variabile GV rimane sul disco rigido del computer anche dopo la chiusura del terminale client. Una volta dichiarata la variabile GV esiste nel terminale del cliente per 4 settimane dall'ultima chiamata. Se nessun programma accede alla variabile GV durante questo periodo, la variabile GV viene cancellata dal terminale client. Una variabile GV può essere solo di tipo doppio.
 
etroplus:

Ciao!

Non riesco a capire perché non posso modificare una posizione aperta, ho digitato l'ordine (nella funzione order select)

//+------------------------------------------------------------------+
|| Notizie commerciali.mq4
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp.
#proprietà link "http://www.metaquotes.net"


extern bool In_BUYSTOP=true;
extern intProfit_buy=100;
extern int StopLoss_buy=5;
extern double Lots_buy=0.01;
//+------------------------------------------------------------------+
extern bool In_SELLSTOP =true;
extern inttern TakeProfit_sell=100;
extern int StopLoss_sell =5;
extern double Lots_sell =0.01;
extern int LevelProfit = 25; // - Livello di profitto in punti, che è necessario raggiungere per trasferire il suo stop al livello di Breakeven.
extern int LevelWLoss = 1; // - Livello di pareggio in punti, al quale la posizione di stop sarà spostata dopo che il suo profitto raggiunge il livello LevelProfit in punti.

//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point); // BUY è ridondante, prima tutte le variabili sono uguali a 0
int profitsell=((OrderOpenPrice()- Ask)/Point); // SELL
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int start()
//----
{
biglietto int;
se (Bid >iHigh(NULL,PERIOD_D1,1))
{
se(OrdiniTotali() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point,Hour() == 21 && Minute() == 59)
}
se (Ask <iLow(NULL,PERIOD_D1,1))
{
se(OrdiniTotali() < 1)
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots_buy,iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point,iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point,Hour() == 21 && Minute() == 59)
}
//oooooooooooooooooooooooooooooooooooooooooooooo
ritorno(0);
}
//+------------------------------------------------------------------+
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
int order_type=OrderType();
order_type=OP_SELL;//magarise(order_type==OP_SELL), allora sono necessarie altre parentesi
int profitsell=((OrderOpenPrice()- Ask)/Point);
if (profitsell>5)//cosìcercherà di modificare l'ordine ogni tick?
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue);
ritorno(0);
}
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
order_type=OP_BUY;
int profitbuy=((Bid - OrderOpenPrice())/Point);
se (profitbuy>5)
int stopmodify=OrderOpenPrice();
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue);
ritorno(0);
}
 
Ciao, per favore consiglia dove nel codice c'è l'imprecisione, dato che quando lo script funziona c'è un tale errore nel log:


15:40:29 11dP_real_symbol EURUSD,H4: <--- 2 grafici corretti trovati. --->

15:40:29 11dP_real_symbol EURUSD,H4: <--- Per vedere i risultati, aprire il grafico EURUSD,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4: il nome del simbolo per la funzione MarketInfo deve essere una stringa

15:40:29 11dP_real_symbol: parametro stringa vuoto per la funzione FileWriteString

15:40:29 11dP_real_symbol EURUSD,H4: il nome del simbolo per la funzione MarketInfo deve essere una stringa

15:40:29 11dP_real_symbol EURUSD,H4: <--- Per vedere i risultati, aprire i grafici,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4: il primo parametro per la funzione WindowHandle deve essere una stringa inizializzata

15:40:30 11dP_real_symbol EURUSD,H4: il primo parametro per la funzione WindowHandle deve essere una stringa inizializzata

15:40:31 11dP_real_symbol EURUSD,H4: il primo parametro per la funzione WindowHandle deve essere una stringa inizializzata

Sto allegando il codice stesso qui sotto:
File:
11dp_1.mq4  15 kb
 

Per favore, ditemi cosa significa "OP BUY" - variabile attesa

here while(difference>Span)
( OrderSend (string symbol, OP_BUY, volume, double price, slippage,Bid-stoploss*Point,
Bid+takeprofit*Point, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=Red) )

while(0-different>Red)
( OrderSend (string symbol, OP_SELL, volume, double price, slippage,Ask+stoploss*Point,
Ask-takeprofit*Point, string comment=NULL, string comment=0, int magic=0, datetime expiration=0, color arrow_color=Black) )

 
Come faccio a scrivere un punto sul grafico in mql4? Ho bisogno di scrivere il prezzo e il tempo in modo che rimanga al suo posto in qualsiasi timeframe
Motivazione: