Помощь в кодировании - страница 259

 

Я пытаюсь добиться обратного тестирования тика за тиком на пользовательском графике. Поскольку у меня нет опыта в этом, возможно, кто-то может помочь мне сделать шаг вперед. Потому что я, очевидно, делаю что-то не так.

Я читаю котировки из CSV файла и сохраняю их в FXT и HST файлы.

Затем я помечаю файл FXT только для чтения. Проблема в том, что тестер стратегий никогда не принимает мой FXT-файл и останавливается.

Я понятия не имею, насколько последовательными должны быть файлы FXT и HST. Что я имею в виду - например, график rangebars имеет равномерный разрыв в 1 пункт в HST, в то время как в FXT он имеет умеренный разрыв. Может ли это быть проблемой?

Файлы:
clipboard72.png  19 kb
 
Ovo:
Я пытаюсь добиться обратного тестирования пользовательского графика по тикам. Поскольку у меня нет опыта в этом, возможно, кто-то может мне помочь, чтобы я продвинулся вперед. Потому что я, очевидно, делаю что-то не так.

Я читаю котировки из файла CSV и сохраняю их в файлах FXT и HST.

Затем я помечаю файл FXT только для чтения. Проблема в том, что тестер стратегий никогда не принимает мой файл FXT и останавливается.

Я понятия не имею, насколько последовательными должны быть файлы FXT и HST. Что я имею в виду - например, график rangebars имеет равномерный разрыв в 1 пункт в HST, в то время как в FXT он имеет умеренный разрыв. Может ли это быть проблемой?

Ovo

Это вообще не должно быть проблемой (при обратном тестировании в fxt-файле образуются гораздо большие разрывы, чем эти 1 пункт). Формат файла fxt подходящий (новый)?

 
mladen:
Ovo Это вообще не должно быть проблемой (при обратном тестировании в fxt-файле образуются гораздо большие разрывы, чем эти 1 пункт). Подходит ли формат fxt-файла (новый)?

Спасибо, я надеялся, что это не проблема.

Я не совсем уверен, какой на самом деле формат FXT, но тот, который у меня есть, выдает свечи.

Сначала я нашел 401 версию на сайте MQL4, которая помогла мне сделать реверс-инжиниринг 405, затем я нашел скрипт CSV2FXT с 405 версией внутри, но я еще не полностью проанализировал его.

Я думаю, что ошибка кроется скорее в содержимом заголовка, на что я не обратил особого внимания.

Так что теперь я должен сосредоточиться скорее на заголовке FXT, чем на форме свечи (она отображается вполне адекватно).

В настоящее время я использую эту структуру для 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:
Спасибо, я надеялся, что это не проблема.

Я не совсем уверен, каков реальный формат FXT, но тот, который у меня есть, показывает свечи.

Сначала я нашел 401 версию на сайте MQL4, которая помогла мне сделать реверс-инжиниринг 405, затем я нашел скрипт CSV2FXT с 405 версией внутри, но я еще не полностью проанализировал его.

Я думаю, что ошибка кроется скорее в содержимом заголовка, на что я не обратил особого внимания.

Так что теперь я должен сосредоточиться скорее на заголовке FXT, чем на форме свечи (она отображается вполне адекватно).

В настоящее время я использую эту структуру для 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];

};

Постараюсь найти еще немного информации

Некоторые детали о заголовках hst и fxt файлов они так и не выпустили, поэтому я не уверен, что мы можем расшифровать формат заголовка на 100% точно.

 

Здравствуйте, я использую не круглые числа, а свои собственные специальные числа, и я хотел бы заменить их на прилагаемой инди. Мои числа 5, 15, 31, 45 и 67. Жду ваших ответов в ближайшее время

Файлы:
 

OrderModify Error1

Привет всем,

Я хотел бы узнать, может ли кто-нибудь помочь мне. Я не получаю никаких ошибок при компиляции, но во время

тестирования я получаю "OrderModify Error1" от MT4. Что я могу сделать лучше

в моем коде ниже?

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

}

}

Заранее спасибо!

 
tfi_markets:
OrderModify Error1

Привет всем,

Мне интересно, может ли кто-нибудь помочь мне. Я не получаю никаких ошибок при компиляции, но во время

тестирования я получаю "OrderModify Error1" от MT4. Что я могу сделать лучше

в моем коде ниже?

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

}

}

Заранее спасибо!

tfi_markets

Ошибка 1 - это не ошибка, она просто означает, что модификация, которую вы собираетесь сделать, не приведет к модификации ордера (ордер останется прежним). Вы можете оставить все как есть или просто проверить, отличается ли предполагаемая измененная часть от того значения, которое вы собираетесь ей присвоить.

 

Здравствуйте, мне нужна помощь, чтобы получить количество дней с начала графика ренко.

Спасибо за помощь

 
lambic:
Здравствуйте, мне нужна помощь, чтобы получить количество дней с начала графика ренко. Спасибо за помощь.

Если вы имеете в виду период с первого (самого старого) бара ренко, просто сделайте следующее:

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

 
mladen:
Если вы имеете в виду с первого (самого старого) бара ренко, то просто сделайте следующее: int numOfDays = (Time[0]-Time)/(1440*60);

Так просто! Я искал функцию массива, а это просто Time[]. Извините, это глупо. Спасибо большое!

Причина обращения: