Отличный советник в бэктесте! - страница 114

 
DudeWorks:
также вот образец записи файла, прямо из редактора MT...

Это позволит вам вести журнал в csv-файл, модифицируйте его по своему усмотрению.

int handle;

datetime orderOpen=OrderOpenTime();

handle=FileOpen("c:\cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

FileWrite(handle, Close[0], Open[0], High[0], Low[0], TimeToStr(orderOpen));

FileClose(handle);

}

Я работаю на IBFX live, я могу переслать вам тест на микро-лотах. Однако у меня есть другие реальные сделки на счете, так что мне придется вычленять результаты CT отдельно.

PM мне для адреса электронной почты

Мне нужно, чтобы все это печаталось в файл, а также все индикаторы, которые я оцениваю.... В настоящее время это просто печатается в журнал.

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, SlipPage, StopLoss, Bid - (TakeProfit * Point), "NeuroCluster-testing-AI-LS1", MagicNumber, 0, Green);

if(ticket > 0)

{

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

{

int handle;

datetime orderOpen=OrderOpenTime();

handle=FileOpen("C:\cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle>0)

{

FileWrite(handle,"Hour: ",TimeHour(CurTime())," Minute: ",TimeMinute(CurTime()));

FileWrite(handle,"SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);

FileWrite(handle,"SellSucPossibilityQuality:", SellSucPossibilityQuality);

FileWrite(handle,"BuySucPossibilityQuality:", BuySucPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityQuality:", UndefinedPossibilityQuality);

FileWrite(handle,"SellPossibilityQuality:", SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityQuality:", BuyPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);

FileWrite(handle,"SellSucPossibilityMid:", SellSucPossibilityMid);

FileWrite(handle,"BuySucPossibilityMid:", BuySucPossibilityMid);

FileWrite(handle,"UndefinedPossibilityMid:", UndefinedPossibilityMid);

FileWrite(handle,"SellPossibilityMid:", SellPossibilityMid);

FileWrite(handle,"BuyPossibilityMid:", BuyPossibilityMid);

FileClose(handle);

}

Не уверен, как именно это сделать... но правильно ли это? Это не генерирует файл. это должно быть неправильно.

2006.11.08 11:21:54 2006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: error(4101): incorrect file name

2006.11.08 11:21:54 2006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertEuro: абсолютный путь к файлу "C:\cyberia_log.csv" не разрешен

????

что не так?

 

так лучше....

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, SlipPage, StopLoss, Bid - (TakeProfit * Point), "NeuroCluster-testing-AI-LS1", MagicNumber, 0, Green);

if(ticket > 0)

{

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

{

datetime sorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Hour: ",TimeHour(CurTime())," Minute: ",TimeMinute(CurTime()));

FileWrite(handle,"SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);

FileWrite(handle,"SellSucPossibilityQuality:", SellSucPossibilityQuality);

FileWrite(handle,"BuySucPossibilityQuality:", BuySucPossibilityQuality);

FileWrite(handle,"UndefinedPossibilityQuality:", UndefinedPossibilityQuality);

FileWrite(handle,"SellPossibilityQuality:", SellPossibilityQuality);

FileWrite(handle,"BuyPossibilityQuality:", BuyPossibilityQuality);

FileWrite(handle,"UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);

FileWrite(handle,"SellSucPossibilityMid:", SellSucPossibilityMid);

FileWrite(handle,"BuySucPossibilityMid:", BuySucPossibilityMid);

FileWrite(handle,"UndefinedPossibilityMid:", UndefinedPossibilityMid);

FileWrite(handle,"SellPossibilityMid:", SellPossibilityMid);

FileWrite(handle,"BuyPossibilityMid:", BuyPossibilityMid);

FileClose(handle);

}

else

{

int err;

err=GetLastError();

Print("error(",err,"): ",ErrorDescription(err));

return(0);

}

ok это генерирует файл, но файл содержит только 1 запись, а не КАЖДЫЙ заказ....oy

 
DudeWorks:
Я напишу код для вас, дайте мне время до вечера, скажите мне, что еще вы хотите сбросить.

Наряду с логикой киберии выше...

Я думаю протестировать индикатор силы медведей и быков, cci, 3 значения adx, macd и stochastic, rsi, и 1MA, основанный на закрытии текущего бара (MA закрытия). Если есть другие индикаторы, которые, по вашему мнению, могут работать, чтобы быть оцененными, давайте и выкладывайте их тоже. Вы поняли идею, я просто хочу создать профиль, поэтому чем больше углов, тем лучше... до определенного момента, я думаю.

Есть еще одна вещь, которую я должен добавить. Я работал над другим советником, который сохраняет значение эквити счета при открытии ордера, а затем сравнивает его со значением эквити счета при закрытии ордера и определяет, была ли сделка выигрышной или проигрышной... Мне нужно, чтобы этот дамп данных включал результаты таких сделок, чтобы мы знали, в какую категорию отнести сделку при ее анализе.

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

Я уже на полпути, у меня уже есть это в коде, просто нужно еще немного подправить...

///////////// запись результатов/////////////////

void RecordLongOutcomes()

{

if(Bid<OrderOpenPrice())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

Print(" Loser Long ",OrderTicket()," Opened: ",OrderOpenPrice(), "Closed: ", Bid);

}

return (0);

}

void RecordShortOutcomes()

{

if(Ask>OrderOpenPrice())

{

OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

Print(" Проигравший шорт ",OrderTicket()," Открыт: ",OrderOpenPrice(), "Closed: ", Bid);

}

return(0);

}

 

Итак, над чем мы работаем... та же самая идея, которая была у меня некоторое время назад, но я был слишком ленив, чтобы сделать это... это регистрировать все переменные и значения индикаторов во время каждого ордера, чтобы мы могли видеть, что именно происходит в каждом ордере, чтобы определить корреляции.

Мне было любопытно, какие возможности были в тот момент, когда он наконец подал сигнал ордера, так что это действительно должно отображаться...

Однако ширина каждой строки может быть довольно широкой, но я думаю, что мы сможем уложиться, если сделаем так, что будем регистрировать только те индикаторы, которые действительно выбраны.

Ширина файла MT4 составляет 64 поля, я думаю... так что этого достаточно для работы.

Я отправил вам свой e-mail.

 
DudeWorks:
Итак, над чем мы работаем... та же идея, которая была у меня некоторое время назад, но я был слишком ленив, чтобы сделать это... это регистрировать все переменные и значения индикаторов во время каждого ордера, чтобы мы могли видеть, что именно происходит в каждом ордере, чтобы определить корреляции.

Мне было любопытно, какие возможности были у индикатора, когда он, наконец, выдал сигнал ордера, так что это должно действительно отобразить...

Однако ширина каждой строки может быть довольно большой, но я думаю, что мы сможем уложиться, если сделаем так, что мы будем регистрировать только те индикаторы, которые действительно выбраны.

Ширина файла MT4 составляет 64 поля, я думаю... так что этого достаточно для работы.

Я отправил вам свой e-mail

Точно! Точность - это действительно то, что мы ищем в наших фильтрах, и это просто может показать нам, как заставить это работать.

Хорошо, я пришлю вам свой проект Patient для изучения, но пусть это не отвлекает вас от получения этого дампа данных, хорошо?

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

Что касается вывода. Ничто из того, что вы выводите на этой платформе, не превысит размеров excel. Что мне действительно нужно, так это чтобы он был легко идентифицируемым, чтобы при импорте в excel я мог видеть, с чем я работаю, а не просто кучу недокументированных чисел, разделенных разделителями. Мне нужны метки данных для каждого значения. Мы рассматриваем 15 полей CT плюс 8 индикаторов, CCI, RSI, 1MA, bearspower, bullspower, adx(три значения) плюс, как бы вы не делали macd и stochastics, если вы считаете 6 для этого, то общее количество полей = 29 плюс результаты выигрыша (см. предыдущее сообщение) или проигрыша =30 открытие и закрытие и время добавить 3 Grand Total=33, как я считаю.

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

 

Что-то в этом давало мне сообщение об ошибке...

'invalid ticket for OrderClose function', пока я не отключил OrderSelect.

но я думаю, вы понимаете, чего я пытаюсь добиться.

/////////////record outcomes/////////////////

void RecordLongOutcomes()

{

//OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

{

if(OrderType()==OP_BUY)

{

if(OrderOpenPrice() + Spread < OrderClosePrice())

{

datetime borderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Winning Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);

FileClose(handle);

Print(" Winning Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err;

err=GetLastError();

Print("error(",err,"): ",ErrorDescription(err));

return(0);

}

}

else

{

datetime buyorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Losing Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",buyorderOpen);

FileClose(handle);

Print(" Losing Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err1;

err=GetLastError();

Print("error(",err1,"): ",ErrorDescription(err1));

return(0);

}

}//if win or lose

}//if buy

}//if symbol and magic number

return (0);

}//record long outcomes

void RecordShortOutcomes()

{

//OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

{

if(OrderType()==OP_SELL)

{

if(OrderOpenPrice() - Spread > OrderClosePrice())

{

datetime borderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Winning Short OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);

FileClose(handle);

Print(" Winning Short ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err3;

err3=GetLastError();

Print("error(",err3,"): ",ErrorDescription(err3));

return(0);

}

}

else

{

datetime sellorderOpen=OrderOpenTime();

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

if(handle!=-1)

{

FileWrite(handle,"Losing Short OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",sellorderOpen);

FileClose(handle);

Print(" Losing Short ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);

}

else

{

int err4;

err4=GetLastError();

Print("error(",err4,"): ",ErrorDescription(err4));

return(0);

}

}//if win or lose

}//if buy

}//if symbol and magic number

return (0);

}//record short outcomes
 

код, который я только что добавил для записи результатов, работает хорошо, за исключением filewrite().

Теперь я создаю файл, но в нем только одна запись, которая, похоже, является окончательным заказом, прогоняемым через тестер, поэтому я думаю, что у меня происходит то, что он перезаписывает каждую запись, а не добавляет ее в конец файла. Если бы я знал, как это исправить, я, вероятно, смог бы вытащить этот дамп данных сейчас.

 
Aaragorn:
Хорошо, это создает файл, но файл содержит только 1 запись, а не КАЖДЫЙ заказ....oy

Файл перезаписывается каждый раз, когда вы его открываете. Одно из решений - открывать файл в функции init() и закрывать его в deinit().

 
tururo:
Файл перезаписывается каждый раз, когда вы его открываете. Одно из решений - открывать файл в функции init() и закрывать его в deinit()

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

Я вижу их в примерах вроде этого...

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

или

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

как насчет того, возможно ли это?

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_READ|FILE_WRITE, ';');

Вы видите, что я не понимаю, как именно добавлять в конец.

Я не уверен, как открыть его в init().

ЗАТЕМ

добавлять к нему каждый новый порядок в конце

ТОГДА

закрыть его в deinit().

Я представляю, что это что-то вроде.

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_READ, ';');

в init, а затем

FileWrite(handle, " Время открытия заказа : ",sorderOpen);

FileWrite(handle, "SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);

FileWrite(handle, "BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);

FileWrite(handle, "UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);

FileWrite(handle, "UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);

FileWrite(handle, "SellSucPossibilityQuality:", SellSucPossibilityQuality);

FileWrite(handle, "BuySucPossibilityQuality:", BuySucPossibilityQuality);

FileWrite(handle, "UndefinedPossibilityQuality:", UndefinedPossibilityQuality);

FileWrite(handle, "SellPossibilityQuality:", SellPossibilityQuality);

FileWrite(handle, "BuyPossibilityQuality:", BuyPossibilityQuality);

FileWrite(handle, "UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);

FileWrite(handle, "SellSucPossibilityMid:", SellSucPossibilityMid);

FileWrite(handle, "BuySucPossibilityMid:", BuySucPossibilityMid);

FileWrite(handle, "UndefinedPossibilityMid:", UndefinedPossibilityMid);

FileWrite(handle, "SellPossibilityMid:", SellPossibilityMid);

FileWrite(handle, "BuyPossibilityMid:", BuyPossibilityMid); FileWrite(handle, "Winning Short OrderTicket: ",OrderTicket(), "Opened @: ",OrderOpenPrice(), "Closed @: ",OrderClosePrice(), "Время открытия ордера: ",borderOpen);

и затем в deinit

FileClose(handle);

правильно ли это?

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

//| We initialize the adviser |

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

int init()

{

handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');

SavedBlockSell = BlockSell;

SavedBlockBuy = BlockBuy;

AccountStatus();

GetMarketInfo();

ModelingPeriod = ValuePeriod * ValuesPeriodCount; // Period of simulation in minutes

if (ValuePeriod != 0 )

ModelingBars = ModelingPeriod / ValuePeriod; // Quantity of steps in the period

CalculateSpread();

return(0);

}

Я получаю ошибку "слишком много открытых файлов"?