Ajuda na codificação - página 259

 

Estou tentando conseguir o tick by tick back test de um gráfico personalizado. Como não tenho experiência com ele, provavelmente alguém poderia me dar uma mãozinha para dar um passo adiante. Porque eu estou aparentemente fazendo algo errado.

Estou lendo citações de um arquivo CSV e armazenando-as em um arquivo FXT e HST.

Então eu marco o arquivo FXT somente para leitura. O problema é que o testador de estratégia nunca aceita meu arquivo FXT, e pára.

O que eu não tenho idéia é até que ponto os arquivos FXT e HST devem ser consistentes. O que eu quero dizer - por exemplo, o gráfico de barras de variação tem uma lacuna uniforme de 1 ponto no HST, enquanto que tem uma lacuna moderada no FXT. Poderia ser um problema?

Arquivos anexados:
clipboard72.png  19 kb
 
Ovo:
Estou tentando conseguir o tick by tick back test de um gráfico personalizado. Como não tenho experiência com ele, provavelmente alguém poderia me dar uma ajuda para dar um passo à frente. Porque eu estou aparentemente fazendo algo errado.

Estou lendo citações de um arquivo CSV e armazenando-as em um arquivo FXT e HST.

Então marquei o arquivo FXT somente para leitura. O problema é que o testador de estratégia nunca aceita meu arquivo FXT, e pára.

O que eu não tenho idéia é até que ponto os arquivos FXT e HST devem ser consistentes. O que eu quero dizer - por exemplo, o gráfico de barras de variação tem uma lacuna uniforme de 1 ponto no HST, enquanto que tem uma lacuna moderada no FXT. Poderia ser um problema?

Ovo

Isso não deve ser um problema de forma alguma (são feitas lacunas muito maiores no arquivo fxt quando você volta a testar do que aqueles 1 pontos). O formato do arquivo fxt é apropriado (novo)?

 
mladen:
Ovo Isso não deve ser um problema de forma alguma (as lacunas muito maiores são feitas no arquivo fxt quando você volta a testar do que aqueles 1 pontos). O formato do arquivo fxt é apropriado (novo)?

Obrigado, eu esperava que não fosse um problema.

Não sei bem qual é o formato real do FXT, mas o que eu tenho é o de velas.

Primeiro encontrei a versão 401 no site da MQL4, que me ajudou a fazer a engenharia reversa do 405, depois encontrei o script do CSV2FXT com a versão 405 dentro, mas ainda não o analisei completamente.

Acho que o bug está mais no conteúdo do cabeçalho, ao qual eu não prestei muita atenção.

Portanto, agora eu deveria me concentrar mais no cabeçalho FXT do que no formato de vela (ele se torna bastante apropriado).

Atualmente uso esta estrutura para o 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:
Obrigado, eu esperava que não fosse um problema.

Não sei bem qual é o formato real do FXT, mas aquele que eu tenho, que faz velas.

Primeiro encontrei a versão 401 no site MQL4, que me ajudou a fazer a engenharia reversa do 405, depois encontrei o script CSV2FXT com a versão 405 dentro, mas ainda não o analisei completamente.

Acho que o bug está mais no conteúdo do cabeçalho, ao qual eu não prestei muita atenção.

Portanto, agora eu deveria me concentrar mais no cabeçalho FXT do que no formato de vela (ele se torna bastante apropriado).

Atualmente, uso esta estrutura para o 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];

};

Vou tentar encontrar mais informações também

Alguns detalhes sobre os cabeçalhos dos arquivos hst e fxt que nunca foram lançados, então não tenho certeza de que podemos decifrar o formato do cabeçalho 100% exatamente

 

Olá, eu não uso números redondos, mas meus próprios números especiais pessoais e vou gostar de SUBSTITUI-los no indy anexo. Meus números são 5, 15, 31, 45 e 67. Aguardando a resposta de sua espécie, em breve

Arquivos anexados:
 

OrderModify Error1

Olá a todos,

Será que alguém poderia me ajudar? Eu não recebo nenhum erro de compilação, mas enquanto

testes anteriores recebo um "OrderModify Error1" do MT4. O que eu poderia fazer melhor?

no meu código abaixo?

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

}

}

Obrigado de antemão!

 
tfi_markets:
OrderModify Error1

Olá a todos,

Será que alguém poderia me ajudar? Eu não recebo nenhum erro de compilação, mas enquanto

testes anteriores recebo um "OrderModify Error1" do MT4. O que eu poderia fazer melhor?

no meu código abaixo?

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

}

}

Agradecemos antecipadamente!

tfi_markets

O erro 1 não é um erro, significa simplesmente que a modificação que você pretende fazer não resultaria na modificação da ordem (a ordem permaneceria a mesma). Você pode deixá-lo como está ou simplesmente verificar se a peça modificada pretendida é diferente do valor que você vai atribuir a ele.

 

Olá, preciso de ajuda para obter o número de dias desde o início de um gráfico de renko .

Obrigado pela ajuda.

 
lambic:
Olá, preciso de ajuda para obter o número de dias desde o início de um gráfico de renko.

Se você quer dizer desde a primeira barra (mais antiga) de renko, simplesmente faça o seguinte :

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

 
mladen:
Se você quer dizer desde a primeira barra (mais antiga) de renko, simplesmente faça o seguinte: int numOfDays = (Time[0]-Time)/(1440*60);

Tão simples! Eu estava procurando por uma função de matriz e era simplesmente tempo[]. Desculpe, é uma estupidez. Muito obrigado!