Chiedete! - pagina 157

 

Provate qualcosa del genere:

string uniqueFileName()

{

string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);

string tname="";

for (int i=0;i<StringLen(sname);i++)

{

string char = StringSubstr(sname,i,1);

if (char!="." && char!=":")

if (char==" ")

tname = tname+"_";

else tname = tname+char;

}

return(tname+"_"+Symbol()+Period()+".csv");

}[/php]this one adds hour, minute and seconds in the middle to make it more or less unique (so something like this "20090924_102541_EURUSD15.csv"). To make it really sure that the file does not exist it would have to be a bit more complicated (something like this :

[php]string uniqueFileName()

{

string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);

string tname="";

int thand;

for (int i=0;i<StringLen(sname);i++)

{

string char = StringSubstr(sname,i,1);

if (char!="." && char!=":")

if (char==" ")

tname = tname+"_";

else tname = tname+char;

}

//

//

//

//

//

tname = tname+"_"+Symbol()+Period()+".csv";

thand = FileOpen(tname,FILE_BIN|FILE_READ);

if (thand==-1)

return(tname);

else

{

FileClose(thand);

return("failed to make unique name");

}

}

Restituirà la stringa"failed to make unique name" se fallisce, nel qual caso dovete decidere quante volte volete che riprovi

PS: l'uso sarebbe someFileName=uniqueFileName();

saluti

mladen

tedalagi:
ciao a tutti,

Sono un trader ma non conosco il linguaggio mq4 e sto cercando di fare questo da martedì ...

Ho bisogno di salvare il mio grafico in formato csv utilizzando uno script. Ho un bello script che posso semplicemente trascinare su qualsiasi grafico e qualsiasi timeframe e fa proprio bene, tranne il nome del file.

Vorrei che potesse generare automaticamente un nome di file unico ogni volta che salvo il grafico in modo da non doverlo rinominare ogni volta che salvo un altro file nella stessa cartella.

stringa fname = [data in formato YYYYMMDD] + "_"+[data - solo ora]+"_" + Symbol() + Period() + ".csv";

Il codice in questione è in grassetto.

Quando ho ottenuto il codice giusto, penso che il nome del file di output sarà simile a questo

20090924_10_GBPJPY15.csv

Mi dispiace che non posso spendere molto tempo per leggere 157 pagine di questo enorme thread (avevo provato e la mia testa è andata in tilt)

Grazie in anticipo.
 
 
 
mladen:
Usalo così (mql non permette funzioni o procedure annidate, quindi la funzione o procedura deve essere separata)

Funziona perfettamente, grazie mille.

mladen:

Per quanto riguarda il salvataggio dei file ovunque: sì, può essere fatto usando le API di Windows. Ecco un link con un buon esempio e una buona spiegazione su come farlo: Operazioni sui file tramite WinAPI - Articoli MQL4

Lo imparerò, e sicuramente ritornerò su questo thread in seguito

Che Dio vi benedica.

 

"Voce duplicata": Perché il mio programma non funziona?

Scusa: l'ho postato prima, ma non riesco a riposizionare il post sul forum.

(Inoltre non permette "segnalibri" dalla cronologia del mio computer...)

Comunque: ho scritto un semplice programma che verifica se due barre consecutive sono "su" o "giù".

Cioè: su "su", il massimo della barra1 è superiore a quello della barra2, e il minimo della barra 1

è anche più alto di quello della barra2. (Giù è simmetrico).

Il programma funziona con i breakout, quindi su "su", il massimo della barra1 meno il minimo

della barra2 dovrebbe essere sopra una certa soglia. ("Giù" è simmetrico).

Ora lavoro con M30 GBPUSD. Ho scelto questa "soglia di breakout" a occhio,

come per il TakeProfit. Lo StopLoss è come indicato nel programma.

Quindi: cerco di fare esperienza con MetaTrader e mql4.

Poi, può provare altri programmi, ottimizzare le cose, ecc.

Quindi: sono arrivato al punto di avere il programma compilato ed eseguito sullo Strategy Tester.

Ma non arriva mai alla seconda metà del programma, né stampa che

ha inserito un ordine.

Per qualcuno esperto, qualsiasi errore io abbia è probabilmente ovvio.

Per me non è evidente.

Quindi: potreste aiutarmi con questo?

Grazie.

Il progresso segue.

//+------------------------------------------------------------------+

//| funzione di inizializzazione esperto |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| funzione di deinizializzazione esperto |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| funzione di avvio esperto |

//+------------------------------------------------------------------+

int start()

{

//----

bool TrendUp1; double TakeProfitUp; double EE = .00500;

bool OrdTot_OK;double lot;double slip;

double SL_Trailing_Up;bool High2Up;bool Low2Up;

int ticketup;int ticketdown;bool DownAndBig; bool UpAndBig;

bool TrendDown; double SL_Trailing_Down; double TakeProfitDown;

bool High2down; bool Low2down;

int ABC = OrdiniTotali();

double Size1 = .00630; bool BigUp; double A = High[1]; double B= Low[2];

double C= High[2]; double D= Low[1]; bool BigDown;

//inizio ordine ------------------------------------down

if (ABC == 0)// nessun ordine in uscita è vero

OrdTot_OK = true;

se (ABC == 0)// nessun ordine in uscita è vero

Stampa ("sulla sequenza di ordini al ribasso, nessun ordine in uscita");

if ((C-D) > Size1)//alto di 2 meno basso di 1 > .0063

BigDown = true;

se ((C-D) > Size1)//alto di 2 meno basso di 1 > .0063

Stampa ("sulla sequenza di ordini al ribasso, trovato un grande breakout al ribasso");

se (Alto[1]< Alto[2])

High2down=true;

se (Alto[1]< Alto[2])

Stampa ("sulla sequenza di ordini al ribasso, le barre consecutive hanno massimi decrescenti");

se (Basso[1]< Basso[2])

Low2down=true;

se(Basso[1]< Basso[2])

Stampa ("sulla sequenza di ordini al ribasso, le barre consecutive hanno minimi decrescenti");

if (High2down && Low2down)

TrendDown=vero;

se (High2down && Low2down)

Stampa ("sulla sequenza di ordini al ribasso, il flag TrendDown è impostato");

se (TrendDown)

SL_Trailing_Down = High[1];

se (TrendDown)

Stampa ("sulla sequenza di ordini al ribasso, ha impostato lo stop_loss");

se (TrendDown)

TakeProfitDown = Bid - (.005);

se (TrendDown)

Stampa ("sulla sequenza di ordini al ribasso, ha ottenuto un takeprofit", TakeProfitDown);

se (TrendDown && BigDown)

DownAndBig = true;

if (DownAndBig && OrdTot_OK)

ticketdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue);

if (DownAndBig && OrdTot_OK)

Stampa ("sulla sequenza di ordini al ribasso, ha cercato di inserire un biglietto", ticketdown);

se (ticketdown < 0)

Print("OrderSend_Down fallito con errore #",GetLastError());

return(0);

//----------------------------------------------down order done

//---------------------------------------------------up order start

se (ABC == 0)

OrdTot_OK = true;

se (ABC == 0)

Stampa ("sulla sequenza in salita, nessun ordine è uscito");

se ((A - B) > Dimensione1)

BigUp = true;

se ((A - B) > Size1)

Stampa ("sulla sequenza in salita, il test delle dimensioni per le due barre era ok");

se (Alto[1] > Alto[2])

High2Up = true;//44

se (Alto[1] > Alto[2])

Stampa ("sulla sequenza in salita, il test per i massimi crescenti era ok");

if(Basso[1] > Basso[2])

Low2Up=vero;

se(Basso[1] > Basso[2])

Stampa ("sulla sequenza in salita, il test per i minimi crescenti era ok");

if (High2Up && Low2Up)

TrendUp1=vero;

if (High2Up && Low2Up)

Stampa ("sulla sequenza di salita, ha impostato il flag per la salita");

se (TrendUp1)

SL_Trailing_Up = Low[1] ;

se (TrendUp1)

Stampa ("sulla sequenza in salita, stabilito lo stoploss");

se (TrendUp1)

TakeProfitUp = Ask + (.005);

se (TrendUp1)

Stampa ("sulla sequenza in salita, stabilito il takeprofit", TakeProfitUp);

se (TrendUp1 && BigUp)

UpAndBig = true;

se ( UpAndBig && OrdTot_OK)

ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);

se (UpAndBig && OrdTot_OK)

Stampa ("sulla sequenza in salita, ha cercato di inviare un ordine", ticketup);

se (ticketup < 0)

Print("OrderSend_Up fallito con errore #",GetLastError());

return(0);

//-------------------------------------------------up order done

//----

return(0);// questa linea potrebbe essere superflua

//+------------------------------------------------------------------+

//----

return(0);

}

//+------------------------------------------------------------------+

 

Usare più CharToStr????

Vorrei mettere due caratteri wingding. Uno sopra l'altro. Questo è il codice che sto usando per impostare il primo carattere-----ObjectSetText("signal "+x+"0",CharToStr(104),symbolSize, "Wingdings",Yellow);.

Vorrei aggiungere (236) e usare un colore diverso per esso.

È possibile farlo? Se lo è, per favore aiutatemi.

Grazie per aver guardato,

gever17

 

Sleep | IsTradeContextBusy

Un saluto a CodeMasters e a tutti gli altri!

Ho un EA basato su Fractals, è usato su 1 piattaforma MT4, e su più coppie di valute, su timeframe D1.

Siccome più di una copia dell'EA fa trading nello stesso momento, ricevo la notifica ''Trade Context Is Busy'' nel mio Journal.

Vorrei inserire la funzione Sleep o IsTradeContextBusy nel mio EA, ma non so dove metterla:

- dopo la funzione Invia ordine, separatamente per la funzione Vendi e Compra?

- dopo la funzione Invia ordine sia per Vendere che per Comprare?

- come risolvere questo problema - con

if (IsTradeContextBusy() == true) Sleep (5000); return;

???

Per favore consigliatemi o indicatemi la soluzione.

Grazie mille per il vostro aiuto,

Buon divertimento,

Simon

EA allegato.

 

Consiglio necessario!

Salve,

Apprezzerei molto l'aiuto di un programmatore per un problema che mi fa perdere soldi. E' che ho un EA che dovrebbe aprire posizioni ad un certo livello di prezzo, ma a volte il whipsaw gli fa aprire troppe posizioni. Vorrei che ne aprisse solo una. Qualcuno può dirmi se questo può essere risolto con una linea di codice o se devo assumere un programmatore?

Grazie.

 

Pls adv

Ciao ragazzi, non so proprio come funziona MagicNumber, perché sembra che non funzioni ???? Ho fatto 2 semplici EA in allegato, sto ancora imparando.

1. Compra quando il prezzo supera il 100SMA

2. Vendere quando il prezzo è sopra la 100SMA

Significa che quando li attacchi a 2 diversi grafici Eurusd, dovrebbe comprare e vendere nello stesso momento. In teoria, ogni EA funziona in modo indipendente.

Ma non è così... Sembra che quando Sell viene eseguito per primo, l'EA Buy non funziona, e viceversa.

Qualcuno può ricodificare il mio EA, il MagicNumber di controllo? Qualche errore?

Grazie mille

File:
buy100ma.mq4  9 kb
sell100ma.mq4  9 kb
 
Ghosthand:
Ciao ragazzi, non so proprio come funziona MagicNumber, perché sembra che non funzioni ???? Ho fatto 2 semplici EA in allegato, sto ancora imparando.

1. Compra quando il prezzo è sopra il 100SMA

2. Vendere quando il prezzo è anche sopra 100SMA

Significa che quando li attacchi a 2 diversi grafici Eurusd, dovrebbe comprare e vendere nello stesso momento. In teoria, ogni EA funziona in modo indipendente.

Ma non è così... Sembra che quando Sell viene eseguito per primo, l'EA Buy non funziona, e viceversa.

Qualcuno può ricodificare il mio EA, il MagicNumber di controllo? C'è qualcosa di sbagliato?

Grazie mille

Sembra che tu abbia messo il numero magico correttamente. L'unico problema è che non stai controllando se l'ordine con lo stesso numero magico esiste nel pool di trade corrente. Dovresti passare attraverso tutti gli ordini aperti e controllare se OrderMagicNumber() == Il tuo numero magico prima di inserire un nuovo trade.