Создатель МТС - страница 2

 
Loknar:

Легко, спрашивайте, буду отвечать.

Довольно-таки интересный скрипт. Осталось понять, как интерпретировать его показания :)

разжуйте пожалуйста для танкистов...

1. Столбец "DrawDown": это общее количество убыточных сделок за прогон или максимальное количество подряд или процент убыточных сделок?

2. Столбец "Orders": это, я так понимаю, общее количество сделок за прогон?

3. Столбец "Z account" - я что-то не могу понять что в нем отображается, и что значит "-1.#J"


теперь по показаниям индикаторов.

1. вот у меня например создался файл 4_4_0.csv, в нем первая строчка - это показания индикаторов. 0 - это бар, на котором началось "движение размером UseBars, на MinPoints пунктов", или бар, после которого началось?

2. У некоторых индикаторов должен быть входной параметр, который я не могу определить из файла... вот к примеру такие данные:

CCI 0 : 12.82051282;

BWMFI 0 : 1.46551724 1 : 1.51515152;

Mom 89 : 100.50764683;

MFI 0 : 0.00000000;

Force 144 : 37.92361111

Vol 0: 376.00000000 1: 396.00000000

какой период у CCI и MFI?

В процессе работы скрипта создалось несколько файлов, в которых MFI 0 : 0.00000000; что-то меня мучают подозрения, что где-то ошибка... на графике этого индюка я не смог найти такого значения...

далее... значение индюков - это именно такие и должны быть? или это пересечение индюком линии с таким значением? или тут суть в направлении изменения (например увеличение объема, например, или рост ADX)


Ну и по заданию входных параметров...

при попытке произвольно изменить значения TakeProfitMin, TakeProfitMax, StopLossMin, StopLossMax

при запуске скрипт отказывается работать, мотивируя это тем что "Array with systems not sized correctly! Amount of systems : " и потом разные числа, в зависимости от того какие значения ставить.

можно ли безболезненно изменить размерность VirtClosedOrders в зависимости от нужных параметров и заодно уменьшить количество вариантов чтобы быстрее процесс шел?

 
SouthAlex:
Loknar:

Легко, спрашивайте, буду отвечать.

Довольно-таки интересный скрипт. Осталось понять, как интерпретировать его показания :)

разжуйте пожалуйста для танкистов...

1. Столбец "DrawDown": это общее количество убыточных сделок за прогон или максимальное количество подряд или процент убыточных сделок?

2. Столбец "Orders": это, я так понимаю, общее количество сделок за прогон?

3. Столбец "Z account" - я что-то не могу понять что в нем отображается, и что значит "-1.#J"


теперь по показаниям индикаторов.

1. вот у меня например создался файл 4_4_0.csv, в нем первая строчка - это показания индикаторов. 0 - это бар, на котором началось "движение размером UseBars, на MinPoints пунктов", или бар, после которого началось?

2. У некоторых индикаторов должен быть входной параметр, который я не могу определить из файла... вот к примеру такие данные:

CCI 0 : 12.82051282;

BWMFI 0 : 1.46551724 1 : 1.51515152;

Mom 89 : 100.50764683;

MFI 0 : 0.00000000;

Force 144 : 37.92361111

Vol 0: 376.00000000 1: 396.00000000

какой период у CCI и MFI?

В процессе работы скрипта создалось несколько файлов, в которых MFI 0 : 0.00000000; что-то меня мучают подозрения, что где-то ошибка... на графике этого индюка я не смог найти такого значения...

далее... значение индюков - это именно такие и должны быть? или это пересечение индюком линии с таким значением? или тут суть в направлении изменения (например увеличение объема, например, или рост ADX)


Ну и по заданию входных параметров...

при попытке произвольно изменить значения TakeProfitMin, TakeProfitMax, StopLossMin, StopLossMax

при запуске скрипт отказывается работать, мотивируя это тем что "Array with systems not sized correctly! Amount of systems : " и потом разные числа, в зависимости от того какие значения ставить.

можно ли безболезненно изменить размерность VirtClosedOrders в зависимости от нужных параметров и заодно уменьшить количество вариантов чтобы быстрее процесс шел?

1. Это скорее первая просадка в процентах от начального депо.

2. да

3. я видимо как-то не так его считаю у меня тоже часто такое значение, а вообще это по идее должен быть Z-счет. Подробнее об этом читайте в статье Rosh "Математика трейдинга"


Насчет параметров индикаторов - все что перед двоеточием это скорее всего период индикатора если не указано иное (для стохастика например он напишет что есть что). После двоеточия - значение для сигнала. Само значение надо интерпретировать с точки зрения логики открытия позиций, которая описана в функции Signal() - в абсолютных числах оно не имеет смысла, гляньте туда - станет понятно думаю. С CCI и MFI я так понял у вас 0 период... видимо там надо логику Mathrand изменить на a=MathRand()%12+1; а то он ноль как период подбирает, не подумал об этом.

Насчет же TP-SL - да там надо поменять размер массива в третьем измерении на то что скажет система, выдавая ошибку, и тогда скрипт будет работать.

Писал просто все крайне сумбурно и больше для эксперимента так что недочеты вот и вылазят :) Спасибо за информацию!

 
Loknar:

Насчет же TP-SL - да там надо поменять размер массива в третьем измерении на то что скажет система, выдавая ошибку, и тогда скрипт будет работать.


спасибо за ответ. новые вопросы?

А если в init вычислить этот AmountOfSystems и в соответствии с ним сделать ресайз VirtClosedOrders?

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

также интересует такой нюанс по логике работы скрипта: допустим я задал искать движения из 4 баров размеров не менее 200 пунктов. допустим, есть в истории движение из 7 примерно одинаковых баров размером 400 пунктов. Скрипт будет считать это как один паттерн? или как четыре?

Loknar:

Писал просто все крайне сумбурно и больше для эксперимента так что недочеты вот и вылазят :) Спасибо за информацию!



ну для того бета-тестинг и придумали, чтобы сделать хорошую программу еще лучше :)

 
SouthAlex:
Loknar:

Насчет же TP-SL - да там надо поменять размер массива в третьем измерении на то что скажет система, выдавая ошибку, и тогда скрипт будет работать.


спасибо за ответ. новые вопросы?

А если в init вычислить этот AmountOfSystems и в соответствии с ним сделать ресайз VirtClosedOrders?

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

также интересует такой нюанс по логике работы скрипта: допустим я задал искать движения из 4 баров размеров не менее 200 пунктов. допустим, есть в истории движение из 7 примерно одинаковых баров размером 400 пунктов. Скрипт будет считать это как один паттерн? или как четыре?

Loknar:

Писал просто все крайне сумбурно и больше для эксперимента так что недочеты вот и вылазят :) Спасибо за информацию!



ну для того бета-тестинг и придумали, чтобы сделать хорошую программу еще лучше :)


MQL не позволяет ресайзить массивы в измерениях, кроме первого и указывать их неявно (с помощью переменных) ну или по крайней мере я не знаю как это сделать.

Насчет бара вычислений - он в функции SearchPatterns присваивается : PatternDown[b]=pc; - следовательно на начале самого движения, чтоб на баре "до" надо видимо сделать PatternDown[b]=pc+1;

Сам поиск там крайне примитивно устроен так что его можно дорабатывать. По логике этой же функции после того как 4 бара нашлись - идет просто перескок на следующие 4 бара : pc=pc-UseBars; так что если хотите логику поиска можно всегда поменять. Но это уже будет другая функция. Так что в вашем случае это будет один паттерн.

 
Loknar:

MQL не позволяет ресайзить массивы в измерениях, кроме первого и указывать их неявно (с помощью переменных) ну или по крайней мере я не знаю как это сделать.

Насчет бара вычислений - он в функции SearchPatterns присваивается : PatternDown[b]=pc; - следовательно на начале самого движения, чтоб на баре "до" надо видимо сделать PatternDown[b]=pc+1;

Сам поиск там крайне примитивно устроен так что его можно дорабатывать. По логике этой же функции после того как 4 бара нашлись - идет просто перескок на следующие 4 бара : pc=pc-UseBars; так что если хотите логику поиска можно всегда поменять. Но это уже будет другая функция. Так что в вашем случае это будет один паттерн.


насколько я понял, ошибку в работе скрипта вызывает несовпадение вычислений с третьей размерностью массива. Какая разница - будет она третьей или первой? если MQL позволяет ресайзить только первое измерение, то сделать нужное измерение первым и ресайзить его по мере надобности...

насчет всего остального понял. спасибо за ответы.

 
SouthAlex:


насколько я понял, ошибку в работе скрипта вызывает несовпадение вычислений с третьей размерностью массива. Какая разница - будет она третьей или первой? если MQL позволяет ресайзить только первое измерение, то сделать нужное измерение первым и ресайзить его по мере надобности...

насчет всего остального понял. спасибо за ответы.


Ну так первое итак ресайзится под другие нужны :) там считаются закрытые ордера для систем
 

Ну вот первая четверка. Ничего радикального конечно, но для авторобота вроде неплохо :)

Код - пример системы для интерпретирования результатов - все интерпретировние в функции Signal()

extern double Lots = 0.1;
extern int LotsMax = 10;
extern bool IncreasingLot = true;
extern int LotsPercent = 10;
extern int StopLoss=40;
extern int TakeProfit=200;
extern int Magic=900;
extern bool UseBuy=true;
double ATR1, ATR2, Bears;
 
bool Signal() {
   int sig;
   ATR1=iATR(Symbol(),0,5,1);
   ATR2=iATR(Symbol(),0,5,25);
   Bears=iBearsPower(Symbol(),0,55,PRICE_CLOSE,1);
   if (ATR1>ATR2) sig++;
   if (Bears<0) sig++;
   if (sig==2) return(true);
   if (sig<2) return(false);
return(false);
}
double GetSizeLot() { 
  double dLot; 
  // Фиксированный лот
  if (IncreasingLot==false) dLot=Lots; 
  // фиксированный процент от депозита 
  if (IncreasingLot==true) {  
  dLot=MathCeil(AccountEquity()/10000*LotsPercent)/10; 
  if (dLot<0.1)  dLot=0.1;
  if (dLot>LotsMax) dLot=LotsMax;
  }   
  return(dLot);  
}
 
 
 
bool MagNum(int num) { 
   int TotalOrd, TekOrd;     
   TotalOrd = OrdersTotal();
   for(TekOrd = 0; TekOrd < TotalOrd; TekOrd++) { OrderSelect(TekOrd, SELECT_BY_POS, MODE_TRADES);
         if (OrderMagicNumber()==num && OrderSymbol()==Symbol()) return (True); 
   }  
return (False); 
}
bool MagNumOpen(int num, int mode) { 
   int TotalOrd, TekOrd;     
   TotalOrd = OrdersTotal();
   for(TekOrd = 0; TekOrd < TotalOrd; TekOrd++) { OrderSelect(TekOrd, SELECT_BY_POS, MODE_TRADES);
         if (OrderMagicNumber()==num && mode==1 && OrderSymbol()==Symbol() && OrderType()==OP_BUY) return (True); 
         if (OrderMagicNumber()==num && mode==2 && OrderSymbol()==Symbol() && OrderType()==OP_SELL) return (True); 
   }  
return (False); 
}
void OpenBuy(int num) {
   double Lotss=GetSizeLot();
      int ticket=OrderSend(Symbol(), OP_BUY, Lotss, Ask, 10, Ask-StopLoss*Point, Ask+TakeProfit*Point, "590", num, 0);
}
void OpenSell(int num) {
   double Lotss=GetSizeLot();
      int ticket=OrderSend(Symbol(), OP_SELL, Lotss, Bid, 10, Bid+StopLoss*Point, Bid-TakeProfit*Point, "590", num, 0);
}
 
 
int start() {
 
if (MagNum(Magic)==false && Signal() && UseBuy) OpenBuy(Magic);
if (MagNum(Magic)==false && Signal() && !UseBuy) OpenSell(Magic);
 
 
return(0);
}

Стейт не прикрепляется, только картинка :


И то что сам Creator выдал :

ATR 5 0 : 0.00202000 2 : 0.00124000; Bears 55 : -0.00403920; CCI 0 : -100.00000000;

TP;SL;PF;Profit;DrawDown;Orders;MO;SO;MO/SO;Z account
200;40;1.75;9598;20;435;22.06;105.05;0.21;-1.#J
200;50;1.71;8778;25;352;24.94;114.51;0.22;0.03

 

там в функциях VirtOrderClose и ManageVirtual цифровые значения 0.0001 - это, наверное, надо заменить на Point?

у меня вот тоже картинка интересная получилась...

правда скрипт выдавал период для ADX 610, но при нем не открылось ни одной сделки, я его заменил на стандартный 14. и стоплосс я использовал не тот что скрипт выдал, а стоп устанавливался по хай/лоу ближайших фракталов. в качестве советника использовался "пример системы" из предыдущего поста автора системы.

 
SouthAlex:

там в функциях VirtOrderClose и ManageVirtual цифровые значения 0.0001 - это, наверное, надо заменить на Point?


ага, там просто что-то не то было с поинтами вот и поставил просто 0.0001
 

а можно еще вопросец?

в функции DATAChecker есть строчка

if (dProfit>(1500.0/518400.0)*MaxBars*Period()) cret++;

что за хитрое число 518400 и почему идет зависимость от количества рассматриваемых баров и таймфрейма?

я почему спрашиваю, тут иногда скрипт в столбце "Profit" выдает 30000 и более. начинаю тестировать с найденными параметрами - фигвам.

и вот еще что заметил... вот скрипт выбрал набор индюков с какими-то параметрами. и начинает по этому набору создавать кучу файлов (по количеству найденных паттернов) типа 4_0_0, 4_1_0, 4_2_0 и так далее. это так и задумано? не совсем понятен смысл создания такой кучи файлов.

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