Советники: Martin - страница 7

 
Привет ребята! 
Мартынгалу нельзя включать пастайаанна. 
Перед нонками выключают. Лучче торговать в начале и  в конце месяца.
 

Написан макрос(прикреплен внизу комментария) на Excel 2003 для сортировки лучших проходов по максимальной просадке(в $) на 10 торговых инструментов (пар).

Инструкция: После окончания оптимизации сохранить результаты оптимизации как отчет(по умолчанию файл OptimizationReport.htm). Открыть отчет(OptimizationReport.htm) с помощью Excel 2003. В Excel'е запустить Microsoft Visual Basic(Alt+F11 или Сервис -> макрос-> редактор VB). В Basic'е - File -> Import File... -> BestSort.bas. Закрыть Basic. И запустить макрос "Расчет" в Excel'е (Alt+F8 или Сервис -> Макрос -> Макросы... ...Выполнить).
Файлы:
BestSort.zip  3 kb
 
Aleksey Altukhov:

Написан макрос(прикреплен внизу комментария) на Excel 2003 для сортировки лучших проходов по максимальной просадке(в $) на 10 торговых инструментов (пар).

Инструкция: После окончания оптимизации сохранить результаты оптимизации как отчет(по умолчанию файл OptimizationReport.htm). Открыть отчет(OptimizationReport.htm) с помощью Excel 2003. В Excel'е запустить Microsoft Visual Basic(Alt+F11 или Сервис -> макрос-> редактор VB). В Basic'е - File -> Import File... -> BestSort.bas. Закрыть Basic. И запустить макрос "Расчет" в Excel'е (Alt+F8 или Сервис -> Макрос -> Макросы... ...Выполнить).
P.S. Для повторной сортировки нужно закрыть отчет без сохранения и открыть заново отчет в Excel.
 

Советник хороший, спасибо! Только у меня на окне графика какие-то черные прямоугольники. Что должно быть вместо них?

Работает ли советник, если поставить свои стоп-ордера, на случай сильного движения?

 
Открыл на другом терминале - черных прямоугольников нет. Как же их убрать с первого терминала?
 
Понял, это таблица. Как-то она заслоняет экран, если окно маленькое. Можно ли убрать хотя-бы нижнюю часть (мне эта информация не нужна). Мне кажется, что достаточно только отображать колич. открытых ордеров  buy и sell и суммарный лот по ним, чтобы не подсчитывать это вручную.
 
15750:

Советник хороший, спасибо! Только у меня на окне графика какие-то черные прямоугольники. Что должно быть вместо них?

Работает ли советник, если поставить свои стоп-ордера, на случай сильного движения?

1. Черные прямоугольники - это фон для комментария, чтоб комментарий не сливался с другими объектами окна графика. На белом фоне графика комментарий становится черным, и поэтому сливается с фоном этих прямоугольников и комментарий не видно. Решение: Поменять цвет фона графика на черный(F8) или 

Советник обновлен (новый советник прикреплен внизу комментария) 

Исправлено: Сменен цвет фона для комментария с черного на серый. Теперь комментарий будет виден на любом цвете фона графика.

Старый код:

...
   ObjectSetInteger(ChartID(), "fon1", OBJPROP_BGCOLOR, Black);
...
   ObjectSetInteger(ChartID(), "fon2", OBJPROP_BGCOLOR, Black);
...

Новый код:

...
   ObjectSetInteger(ChartID(), "fon1", OBJPROP_BGCOLOR, Gray);
...
   ObjectSetInteger(ChartID(), "fon2", OBJPROP_BGCOLOR, Gray);
...

 2. Советник работает только с открытыми ордерами, выставляя для них общий тейпрофит. Все не свои ордера и ордера с другим MagicNumber он закрывает, как только они выходят в прибыль(на следующем баре(свече)), при этом покрывая своп и комиссию, а MagicNumber назначается от входного параметра Interval. В комментарии ордеров: Martin (X), где Х - это MagicNumber = Interval (+ стоп уровень).

Файлы:
martin_test.mq4  16 kb
martin.mq4  16 kb
 
Сергей Криушин:
Поставил на золото случайно и вот что получилось... как бы перевернуть зеркально, что поменять в коде...есть ли такая возможность...
На золоте способ вычисления прибыли CFD, а не Forex, где при открытии противоположного ордера закрываются текущие по объему(лоту). Для этого нужно переписывать советника, чем я заниматься не хочу. С этим вопросом к фрилансерам (Подсказка для переделывания советника: советник не должен сразу открывать ордера, а на линиях buyline и sellline ставятся отложенные ордера с лотом следующего ордера. Если курс уходит от отложенного ордера, то ордер удаляется и ставится ближе к курсу от предыдущей(удаленной) позиции на значение TakeProfit).
 
15750:
Понял, это таблица. Как-то она заслоняет экран, если окно маленькое. Можно ли убрать хотя-бы нижнюю часть (мне эта информация не нужна). Мне кажется, что достаточно только отображать колич. открытых ордеров  buy и sell и суммарный лот по ним, чтобы не подсчитывать это вручную.
Удали эту часть кода:
...
if (Balance != AccountBalance() || OrdTot != OrdersTotal()) {
      DateTime = TimeCurrent(); ordprof1 = 0;
      ordprof2 = 0; ordprof3 = 0;
      Deposit1 = 0; Withdraw1 = 0;
      Deposit2 = 0; Withdraw2 = 0;
      Deposit3 = 0; Withdraw3 = 0;
      for (cnt = 0; cnt<OrdersHistoryTotal(); cnt++) {
         OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
         if (OrderCloseTime() < TimeCurrent() - 2629800) continue;
         if (StringFind(OrderComment(),"Deposit") >= 0) Deposit3 += OrderProfit() + OrderCommission();
         if (StringFind(OrderComment(),"Withdraw") >= 0) Withdraw3 += OrderProfit() + OrderCommission();
         ordprof3 += OrderProfit() + OrderCommission() + OrderSwap();
         if (OrderCloseTime() < TimeCurrent() - 604800) continue;
         if (StringFind(OrderComment(),"Deposit") >= 0) Deposit2 += OrderProfit() + OrderCommission();
         if (StringFind(OrderComment(),"Withdraw") >= 0) Withdraw2 += OrderProfit() + OrderCommission();
         ordprof2 += OrderProfit() + OrderCommission() + OrderSwap();
         if (OrderCloseTime() < TimeCurrent() - 86400) continue;
         if (StringFind(OrderComment(),"Deposit") >= 0) Deposit1 += OrderProfit() + OrderCommission();
         if (StringFind(OrderComment(),"Withdraw") >= 0) Withdraw1 += OrderProfit() + OrderCommission();
         ordprof1 += OrderProfit() + OrderCommission() + OrderSwap();
      }
      ordprof1 = ordprof1 - Deposit1 - Withdraw1;
      ordprof2 = ordprof2 - Deposit2 - Withdraw2;
      ordprof3 = ordprof3 - Deposit3 - Withdraw3;
      Balance = AccountBalance(); OrdTot = OrdersTotal();
   }
   ObjectDelete(ChartID(), "buyline");        
   ObjectDelete(ChartID(), "sellline");        
   ObjectDelete(ChartID(), "fon1");        
   ObjectDelete(ChartID(), "fon2");        
   ObjectCreate(ChartID(), "buyline", OBJ_HLINE, 0, 0, b);
   ObjectSetInteger(ChartID(), "buyline", OBJPROP_COLOR, Blue);
   ObjectSetInteger(ChartID(), "buyline", OBJPROP_STYLE, STYLE_DASH);
   ObjectCreate(ChartID(), "sellline", OBJ_HLINE, 0, 0, s);
   ObjectSetInteger(ChartID(), "sellline", OBJPROP_COLOR, Red);
   ObjectSetInteger(ChartID(), "sellline", OBJPROP_STYLE, STYLE_DASH);
   ObjectCreate(ChartID(), "fon1", OBJ_RECTANGLE_LABEL, 0, 0, 0);
   ObjectSetInteger(ChartID(), "fon1", OBJPROP_XDISTANCE, 100);
   ObjectSetInteger(ChartID(), "fon1", OBJPROP_YDISTANCE, 12);
   ObjectSetInteger(ChartID(), "fon1", OBJPROP_XSIZE, 700);
   ObjectSetInteger(ChartID(), "fon1", OBJPROP_YSIZE, 30);
   ObjectSetInteger(ChartID(), "fon1", OBJPROP_BGCOLOR, Black);
   ObjectSetInteger(ChartID(), "fon1", OBJPROP_BACK, false);
   ObjectCreate(ChartID(), "fon2", OBJ_RECTANGLE_LABEL, 0, 0, 0);
   ObjectSetInteger(ChartID(), "fon2", OBJPROP_XDISTANCE, 100);
   ObjectSetInteger(ChartID(), "fon2", OBJPROP_YDISTANCE, 45);
   ObjectSetInteger(ChartID(), "fon2", OBJPROP_XSIZE, 300);
   ObjectSetInteger(ChartID(), "fon2", OBJPROP_YSIZE, 70);
   ObjectSetInteger(ChartID(), "fon2", OBJPROP_BGCOLOR, Black);
   ObjectSetInteger(ChartID(), "fon2", OBJPROP_BACK, false);
   ChartSetInteger(ChartID(), CHART_FOREGROUND, 0, false);
   double Usd_per_Rub = MarketInfo("USDRUB",MODE_BID);
   if (Comment_for_cent == true) {
      Comment("                                  Баланс: ", DoubleToString(NormalizeDouble(AccountBalance() * Usd_per_Rub / 100, 2), 2),
      "р., Средства: ", DoubleToString(NormalizeDouble(AccountEquity() * Usd_per_Rub / 100, 2), 2), "р., Прибыль: ",
      DoubleToString(NormalizeDouble(AccountProfit() * Usd_per_Rub / 100, 2), 2), "р., Свободно: ",
      DoubleToString(NormalizeDouble(AccountFreeMargin() * Usd_per_Rub / 100, 2), 2), "р., Lot: ", l, ", ", bl, ", ", sl, ", Всего ордеров: ",
      OrdersTotal(), ", Ордеров по символу: ", CountTrades(), "\n                                  Дата обновления: ",
      TimeToStr(TimeCurrent()), "\n\n                                                                       История счета\n    ",
      "                              ------------------------------------------------------------------------------------------------",
      "\n                                    Сегодня: ", DoubleToString(NormalizeDouble(ordprof1 * Usd_per_Rub / 100, 2), 2),
      "р., Пополнение: ", DoubleToString(NormalizeDouble(Deposit3 * Usd_per_Rub / 100, 2), 2), "р. (за месяц)\n                                    Неделя: ",
      DoubleToString(NormalizeDouble(ordprof2 * Usd_per_Rub / 100, 2), 2), "р., Снятие: ", DoubleToString(NormalizeDouble(Withdraw3 * Usd_per_Rub / 100, 2), 2),
      "р. (за месяц)\n                                    Месяц: ", DoubleToString(NormalizeDouble(ordprof3 * Usd_per_Rub / 100, 2), 2), "р., Дата обновления: ",
      TimeToStr(DateTime));
   }
   if (Comment_for_cent == false) {
      Comment("                                  Баланс: ", DoubleToString(NormalizeDouble(AccountBalance() * Usd_per_Rub, 2), 2),
      "р., Средства: ", DoubleToString(NormalizeDouble(AccountEquity() * Usd_per_Rub, 2), 2), "р., Прибыль: ",
      DoubleToString(NormalizeDouble(AccountProfit() * Usd_per_Rub, 2), 2), "р., Свободно: ",
      DoubleToString(NormalizeDouble(AccountFreeMargin() * Usd_per_Rub, 2), 2), "р., Lot: ", l, ", ", bl, ", ", sl, ", Всего ордеров: ",
      OrdersTotal(), ", Ордеров по символу: ", CountTrades(), "\n                                  Дата обновления: ",
      TimeToStr(TimeCurrent()), "\n\n                                                                       История счета\n    ",
      "                              ------------------------------------------------------------------------------------------------",
      "\n                                    Сегодня: ", DoubleToString(NormalizeDouble(ordprof1 * Usd_per_Rub, 2), 2),
      "р., Пополнение: ", DoubleToString(NormalizeDouble(Deposit3 * Usd_per_Rub, 2), 2), "р. (за месяц)\n                                    Неделя: ",
      DoubleToString(NormalizeDouble(ordprof2 * Usd_per_Rub, 2), 2), "р., Снятие: ", DoubleToString(NormalizeDouble(Withdraw3 * Usd_per_Rub, 2), 2),
      "р. (за месяц)\n                                    Месяц: ", DoubleToString(NormalizeDouble(ordprof3 * Usd_per_Rub, 2), 2), "р., Дата обновления: ",
      TimeToStr(DateTime));
   }
...
 
Aleksey Altukhov:

Написан макрос(прикреплен внизу комментария) на Excel 2003 для сортировки лучших проходов по максимальной просадке(в $) на 10 торговых инструментов (пар).

Инструкция: После окончания оптимизации сохранить результаты оптимизации как отчет(по умолчанию файл OptimizationReport.htm). Открыть отчет(OptimizationReport.htm) с помощью Excel 2003. В Excel'е запустить Microsoft Visual Basic(Alt+F11 или Сервис -> макрос-> редактор VB). В Basic'е - File -> Import File... -> BestSort.bas. Закрыть Basic. И запустить макрос "Расчет" в Excel'е (Alt+F8 или Сервис -> Макрос -> Макросы... ...Выполнить).
Aleksey Altukhov:
P.S. Для повторной сортировки нужно закрыть отчет без сохранения и открыть заново отчет в Excel.
Чтоб каждый раз не импортировать макрос, начните запись нового макроса, выбрав место сохранения в личной книге макросов, и остановите запись. Тогда в редакторе VB появится проект PERSONAL.XLS. Импортируйте макрос в этот проект. 

P.S. А также в оптимизации ставим просадку в %, чтоб отсеять более рискованные проходы(рис.3 в шапке).