Aiuto per la codifica - pagina 259

 

Sto cercando di realizzare il back testing tick by tick di un grafico personalizzato. Dato che non ho esperienza in materia, probabilmente qualcuno potrebbe darmi una mano a fare un passo avanti. Perché apparentemente sto facendo qualcosa di sbagliato.

Sto leggendo le quotazioni da un file CSV e le memorizzo in un file FXT e HST.

Poi contrassegno il file FXT in sola lettura. Il problema è che lo Strategy tester non accetta mai il mio file FXT e si ferma.

Quello di cui non ho idea è quanto debbano essere coerenti i file FXT e HST. Intendo dire che, ad esempio, il grafico rangebars ha un gap uniforme di 1 punto nell'HST, mentre ha un gap moderato nel FXT. Potrebbe essere un problema?

File:
clipboard72.png  19 kb
 
Ovo:
Sto cercando di realizzare il back test tick by tick di un grafico personalizzato. Dato che non ho esperienza in materia, probabilmente qualcuno potrebbe darmi una mano a fare un passo avanti. Perché apparentemente sto facendo qualcosa di sbagliato.

Sto leggendo le citazioni da un file CSV e le memorizzo in un file FXT e HST.

Poi contrassegno il file FXT in sola lettura. Il problema è che lo Strategy tester non accetta mai il mio file FXT e si ferma.

Quello di cui non ho idea è quanto debbano essere coerenti i file FXT e HST. Intendo dire che, ad esempio, il grafico rangebars ha un gap uniforme di 1 punto nell'HST, mentre ha un gap moderato nel FXT. Potrebbe essere un problema?

Ovo

Questo non dovrebbe essere affatto un problema (nel file fxt vengono fatti gap molto più grandi quando si fa il back test rispetto a quei 1 punti). Il formato del file fxt è appropriato (nuovo)?

 
mladen:
Ovo Questo non dovrebbe essere affatto un problema (nel file fxt si creano dei gap molto più grandi quando si fa il back test di quei 1 punti). Il formato del file fxt è appropriato (nuovo)?

Grazie, speravo non fosse un problema.

Non sono del tutto sicuro di quale sia il formato effettivo del FXT, ma quello che ho rende le candele.

Prima ho trovato la versione 401 nel sito MQL4, che mi ha aiutato a fare il reverse engineering della 405, poi ho trovato lo script CSV2FXT con dentro la versione 405, ma non l'ho ancora analizzato completamente.

Penso che il bug si trovi piuttosto nel contenuto dell'header, a cui non ho prestato molta attenzione.

Quindi ora dovrei concentrarmi piuttosto sull'intestazione FXT che sulla forma della candela (rende abbastanza bene).

Attualmente uso questa struttura per il FXT:

struct Shortdate {

int date;

};

struct Padding {

char padding;

};

struct MT4FxtCandle {

datetime openTime;

double open;

double high;

double low;

double close;

uint volume;

uint spread;

Shortdate tickTime;

int flag;

};

struct MT4FxtHeader {

int version;

char copyright[64];

char server[128];

char symbol[12];

int period;

TestModelEnum model;

int bars;

Shortdate fromdate;

Shortdate todate;

Padding p1[4];

double modelquality;

char currency[12];

int spread;

int digits;

Padding p2[4];

double point;

int lot_min;

int lot_max;

int lot_step;

int stops_level;

int gtc_pendings;

Padding p3[4];

double contract_size;

double tick_value;

double tick_size;

ProfitCalcModeEnum profit_mode;

int swap_enable;

int swap_type;

Padding p4[4];

double swap_long;

double swap_short;

int swap_rollover3days;

int leverage;

FreeMarginCalcModeEnum free_margin_mode;

MarginCalcModeEnum margin_mode;

int margin_stopout;

ENUM_ACCOUNT_STOPOUT_MODE margin_stopout_mode;

double margin_initial;

double margin_maintenance;

double margin_hedged;

double margin_divider;

char margin_currency[12];

Padding p5[4];

double comm_base;

int comm_type;

int comm_lots;

int from_bar;

int to_bar;

int start_period[6];

int from;

int to;

int freeze_level;

int reserved[61];

};

 
Ovo:
Grazie, speravo non fosse un problema.

Non sono del tutto sicuro di quale sia il formato effettivo dell'FXT, ma quello che ho rende le candele.

Prima ho trovato la versione 401 nel sito MQL4, che mi ha aiutato a fare il reverse engineering della 405, poi ho trovato lo script CSV2FXT con dentro la versione 405, ma non l'ho ancora analizzato completamente.

Penso che il bug si trovi piuttosto nel contenuto dell'header, a cui non ho prestato molta attenzione.

Quindi ora dovrei concentrarmi piuttosto sull'intestazione FXT che sulla forma della candela (rende abbastanza bene).

Attualmente uso questa struttura per il FXT:

struct Shortdate {

int date;

};

struct Padding {

char padding;

};

struct MT4FxtCandle {

datetime openTime;

double open;

double high;

double low;

double close;

uint volume;

uint spread;

Shortdate tickTime;

int flag;

};

struct MT4FxtHeader {

int version;

char copyright[64];

char server[128];

char symbol[12];

int period;

TestModelEnum model;

int bars;

Shortdate fromdate;

Shortdate todate;

Padding p1[4];

double modelquality;

char currency[12];

int spread;

int digits;

Padding p2[4];

double point;

int lot_min;

int lot_max;

int lot_step;

int stops_level;

int gtc_pendings;

Padding p3[4];

double contract_size;

double tick_value;

double tick_size;

ProfitCalcModeEnum profit_mode;

int swap_enable;

int swap_type;

Padding p4[4];

double swap_long;

double swap_short;

int swap_rollover3days;

int leverage;

FreeMarginCalcModeEnum free_margin_mode;

MarginCalcModeEnum margin_mode;

int margin_stopout;

ENUM_ACCOUNT_STOPOUT_MODE margin_stopout_mode;

double margin_initial;

double margin_maintenance;

double margin_hedged;

double margin_divider;

char margin_currency[12];

Padding p5[4];

double comm_base;

int comm_type;

int comm_lots;

int from_bar;

int to_bar;

int start_period[6];

int from;

int to;

int freeze_level;

int reserved[61];

};

Cercherò di trovare anche qualche altra informazione

Alcuni dettagli sulle intestazioni dei file hst e fxt non sono mai stati rilasciati quindi non sono sicuro che possiamo decifrare il formato dell'intestazione al 100% esattamente

 

Ciao io non uso numeri tondi ma i miei numeri speciali personali e vorrei sostituirli sull'allegato indy. I miei numeri sono 5, 15, 31, 45 e 67. Aspettando le vostre gentili risposte al più presto

 

Errore1 di OrderModify

Ciao a tutti,

Mi chiedo se qualcuno può aiutarmi. Non ottengo alcun errore di compilazione, ma mentre

test indietro ottengo un "OrderModify Error1" da MT4. Cosa potrei fare meglio

nel mio codice qui sotto?

bool ModifyOrder(int nOrderType,int ord_ticket,double op,double price,double tp,color mColor=CLR_NONE)

{

int cnt,err;

double myStop;

myStop=ValidStopLoss(nOrderType,price);

cnt=0;

while(cnt<totalTries)

{

if(OrderModify(ord_ticket,op,myStop,tp,0,mColor))

{

return(true);

}

else

{

err=GetLastError();

if(err>1) Print(cnt," Error modifying order : (",ord_ticket,") "+ErrorDescription(err)," err ",err);

if(err>0) cnt++;

Sleep(retryDelay);

}

}

return(false);

}

[/CODE]

void OpenBuyOrder()

{

int ticket;

int err,digits;

double myStopLoss=0,myTakeProfit=0,myPrice=0;

myPrice=MarketInfo(Symbol(),MODE_ASK);

myStopLoss=0;

if(StopLoss>0) myStopLoss=myPrice-StopLoss*point;

if(myStopLoss!=0) ValidStopLoss(OP_BUY,myStopLoss);

myTakeProfit=0;

if(UseTakeProfit && TakeProfit>0) myTakeProfit=myPrice+TakeProfit*point;

// Normalize all price / stoploss / takeprofit to the proper # of digits.

digits=MarketInfo(Symbol(),MODE_DIGITS);

if(digits>0)

{

myPrice=NormalizeDouble(myPrice,digits);

myStopLoss=NormalizeDouble(myStopLoss,digits);

myTakeProfit=NormalizeDouble(myTakeProfit,digits);

}

ticket=OrderSend(Symbol(),OP_BUY,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,setup,MagicNumber,0,LimeGreen);

if(ticket>0 && ModifyOrder(OP_BUY,ticket,OrderOpenPrice(),myStopLoss,myTakeProfit,CLR_NONE))

{

if(Debug) Print("BUY order opened : ",OrderOpenPrice());

}

else

{

err=GetLastError();

Print("Error opening BUY order : ("+err+") "+ErrorDescription(err));

}

}

[/CODE]

[CODE]

void OpenSellOrder()

{

int ticket;

int err,digits;

double myStopLoss=0,myTakeProfit=0,myPrice=0;

myPrice=MarketInfo(Symbol(),MODE_BID);

myStopLoss=0;

if(StopLoss>0) myStopLoss=myPrice+StopLoss*point;

if(myStopLoss!=0) ValidStopLoss(OP_SELL,myStopLoss);

myTakeProfit=0;

if(UseTakeProfit && TakeProfit>0) myTakeProfit=myPrice-TakeProfit*point;

// Normalize all price / stoploss / takeprofit to the proper # of digits.

digits=MarketInfo(Symbol(),MODE_DIGITS);

if(digits>0)

{

myPrice=NormalizeDouble(myPrice,digits);

myStopLoss=NormalizeDouble(myStopLoss,digits);

myTakeProfit=NormalizeDouble(myTakeProfit,digits);

}

ticket=OrderSend(Symbol(),OP_SELL,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,setup,MagicNumber,0,Red);

if(ticket>0 && ModifyOrder(OP_SELL,ticket,OrderOpenPrice(),myStopLoss,myTakeProfit,CLR_NONE))

{

if(Debug) Print("SELL order opened : ",OrderOpenPrice());

}

else

{

err=GetLastError();

Print("Error opening SELL order : ("+err+") "+ErrorDescription(err));

}

return(0);

}

[CODE]

int HandleTrailingStop(int type,int ticket,double op,double os,double tp)

{

double pt,TS=0,myAsk,myBid;

switch(type)

{

case OP_BUY:

{

myBid=MarketInfo(Symbol(),MODE_BID);

switch(TrailingStopType)

{

case 1: pt=point*StopLoss;

if(myBid-os>pt)

ModifyOrder(type,ticket,op,myBid-pt,tp,Aqua);

break;

case 2: pt=point*TrailingStop;

if(myBid-op>pt && os<myBid-pt)

ModifyOrder(type,ticket,op,myBid-pt,tp,Aqua);

break;

}

return(0);

break;

}

case OP_SELL:

{

myAsk=MarketInfo(Symbol(),MODE_ASK);

switch(TrailingStopType)

{

case 1: pt=point*StopLoss;

if(os-myAsk>pt)

ModifyOrder(type,ticket,op,myAsk+pt,tp,Aqua);

break;

case 2: pt=point*TrailingStop;

if(op-myAsk>pt && os>myAsk+pt)

ModifyOrder(type,ticket,op,myAsk+pt,tp,Aqua);

break;

}

}

return(0);

}

}

Grazie in anticipo!

 
tfi_markets:
OrdineModifica Errore1

Ciao a tutti,

Mi chiedo se qualcuno può aiutarmi. Non ottengo alcun errore di compilazione, ma mentre

test indietro ottengo un "OrderModify Error1" da MT4. Cosa potrei fare meglio

nel mio codice qui sotto?

bool ModifyOrder(int nOrderType,int ord_ticket,double op,double price,double tp,color mColor=CLR_NONE)

{

int cnt,err;

double myStop;

myStop=ValidStopLoss(nOrderType,price);

cnt=0;

while(cnt<totalTries)

{

if(OrderModify(ord_ticket,op,myStop,tp,0,mColor))

{

return(true);

}

else

{

err=GetLastError();

if(err>1) Print(cnt," Error modifying order : (",ord_ticket,") "+ErrorDescription(err)," err ",err);

if(err>0) cnt++;

Sleep(retryDelay);

}

}

return(false);

}

[/CODE]

void OpenBuyOrder()

{

int ticket;

int err,digits;

double myStopLoss=0,myTakeProfit=0,myPrice=0;

myPrice=MarketInfo(Symbol(),MODE_ASK);

myStopLoss=0;

if(StopLoss>0) myStopLoss=myPrice-StopLoss*point;

if(myStopLoss!=0) ValidStopLoss(OP_BUY,myStopLoss);

myTakeProfit=0;

if(UseTakeProfit && TakeProfit>0) myTakeProfit=myPrice+TakeProfit*point;

// Normalize all price / stoploss / takeprofit to the proper # of digits.

digits=MarketInfo(Symbol(),MODE_DIGITS);

if(digits>0)

{

myPrice=NormalizeDouble(myPrice,digits);

myStopLoss=NormalizeDouble(myStopLoss,digits);

myTakeProfit=NormalizeDouble(myTakeProfit,digits);

}

ticket=OrderSend(Symbol(),OP_BUY,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,setup,MagicNumber,0,LimeGreen);

if(ticket>0 && ModifyOrder(OP_BUY,ticket,OrderOpenPrice(),myStopLoss,myTakeProfit,CLR_NONE))

{

if(Debug) Print("BUY order opened : ",OrderOpenPrice());

}

else

{

err=GetLastError();

Print("Error opening BUY order : ("+err+") "+ErrorDescription(err));

}

}

[/CODE]

[CODE]

void OpenSellOrder()

{

int ticket;

int err,digits;

double myStopLoss=0,myTakeProfit=0,myPrice=0;

myPrice=MarketInfo(Symbol(),MODE_BID);

myStopLoss=0;

if(StopLoss>0) myStopLoss=myPrice+StopLoss*point;

if(myStopLoss!=0) ValidStopLoss(OP_SELL,myStopLoss);

myTakeProfit=0;

if(UseTakeProfit && TakeProfit>0) myTakeProfit=myPrice-TakeProfit*point;

// Normalize all price / stoploss / takeprofit to the proper # of digits.

digits=MarketInfo(Symbol(),MODE_DIGITS);

if(digits>0)

{

myPrice=NormalizeDouble(myPrice,digits);

myStopLoss=NormalizeDouble(myStopLoss,digits);

myTakeProfit=NormalizeDouble(myTakeProfit,digits);

}

ticket=OrderSend(Symbol(),OP_SELL,lotMM,myPrice,Slippage,myStopLoss,myTakeProfit,setup,MagicNumber,0,Red);

if(ticket>0 && ModifyOrder(OP_SELL,ticket,OrderOpenPrice(),myStopLoss,myTakeProfit,CLR_NONE))

{

if(Debug) Print("SELL order opened : ",OrderOpenPrice());

}

else

{

err=GetLastError();

Print("Error opening SELL order : ("+err+") "+ErrorDescription(err));

}

return(0);

}

[CODE]

int HandleTrailingStop(int type,int ticket,double op,double os,double tp)

{

double pt,TS=0,myAsk,myBid;

switch(type)

{

case OP_BUY:

{

myBid=MarketInfo(Symbol(),MODE_BID);

switch(TrailingStopType)

{

case 1: pt=point*StopLoss;

if(myBid-os>pt)

ModifyOrder(type,ticket,op,myBid-pt,tp,Aqua);

break;

case 2: pt=point*TrailingStop;

if(myBid-op>pt && os<myBid-pt)

ModifyOrder(type,ticket,op,myBid-pt,tp,Aqua);

break;

}

return(0);

break;

}

case OP_SELL:

{

myAsk=MarketInfo(Symbol(),MODE_ASK);

switch(TrailingStopType)

{

case 1: pt=point*StopLoss;

if(os-myAsk>pt)

ModifyOrder(type,ticket,op,myAsk+pt,tp,Aqua);

break;

case 2: pt=point*TrailingStop;

if(op-myAsk>pt && os>myAsk+pt)

ModifyOrder(type,ticket,op,myAsk+pt,tp,Aqua);

break;

}

}

return(0);

}

}

Grazie in anticipo!

tfi_mercati

L'errore 1 non è un errore, significa semplicemente che la modifica che intendi fare non comporterebbe la modifica dell'ordine (l'ordine rimarrebbe lo stesso). Potete lasciarlo così com'è o semplicemente controllare se la parte modificata prevista è diversa dal valore che state per assegnarle

 

Ciao, ho bisogno di aiuto per ottenere il numero di giorni dall'inizio tf un grafico renko.

Grazie per l'aiuto

 
lambic:
Ciao, ho bisogno di aiuto per ottenere il numero di giorni dall'inizio tf un grafico renko. Grazie per l'aiuto

Se intendete dalla prima barra (la più vecchia) di renko, fate semplicemente quanto segue:

int numOfDays = (Time[0]-Time)/(1440*60);

 
mladen:
Se intendete dalla prima barra (la più vecchia) di renko, fate semplicemente come segue: int numOfDays = (Time[0]-Time)/(1440*60);

Così semplice! Stavo cercando una funzione di array ed era semplicemente Time[]. Mi dispiace che sia stupido. Grazie mille!