beton2011

 
Уровень 14

  Моя торговля


График торгового счета beton2011


Группа "Стол заказов MQL"

Рейтинг 2086



РЕКОМЕНДУЮ



Советник для бинарных опционов

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

Надо что бы советник после серии убыточных ордеров, выставлял ставку заданную в настройках и потом увеличивал на Klot.

Выкладываю не переделанную версию советника.

TimeOpen-4.mq4 (10 Kb)
  • 0
  • Просмотров: 3961
  • 24 сентября 2015, 11:37
  • beton2011
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Ещё одну функцию
Следующая запись в группе  
Советник
24 сентября 2015
25 сентября 2015

Комментарии (32)

+
0
Cейчас буду смотреть.
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 24 сентября 2015, 11:48
+
0
Я посмотрел на гранде, там советник не видит историю вообще. Т.е. те функции где советник смотрит тип предыдущей сделки или ее профит не работают.
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 24 сентября 2015, 12:49
+
0
Понятно.

А можно например сделать так. Например открыт один ордер на 60 минут, цена уходит в минус скажем на 10-ть пунктов, тогда советник открывает еще один ордер на 60 минут но уже с увеличенным ордером.
avatar

  14  beton2011 Автор Сообщений: 895

  • 24 сентября 2015, 13:00
+
0
Заработала функция, которая считает лосей, значит можно попробовать отладить остальные функции.
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 24 сентября 2015, 13:10
+
0
Тогда хорошо :) 
avatar

  14  beton2011 Автор Сообщений: 895

  • 24 сентября 2015, 13:16
+
0
Вы самостоятельно занимались отладкой?
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 24 сентября 2015, 13:36
+
0
В этом советнике я ничего не менял.

Проверил ваш код, ордера открывает и закрывает как надо, только пока не увеличивает ставки.

avatar

  14  beton2011 Автор Сообщений: 895

  • 24 сентября 2015, 14:50
+
0
На каком брокере гоняете? Я пытаюсь отладить на гранде, там какая то путаница с историей.
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 24 сентября 2015, 14:54
+
0
Тоже на гранде.
avatar

  14  beton2011 Автор Сообщений: 895

  • 24 сентября 2015, 14:58
+
0
Проверил ваш код, ордера открывает и закрывает как надо, только пока не увеличивает ставки.


Пытались отладить функции?
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 24 сентября 2015, 15:01
+
0
Это как?

avatar

  14  beton2011 Автор Сообщений: 895

  • 24 сентября 2015, 15:06
+
0
Вы же писали, что программируете?
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 24 сентября 2015, 15:10
+
0
Я немного понимаю в коде, но я еще зеленый по сравнению с вами <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; 

Я пробовал переделывать советника по вашей инструкцией «как переделать советник для бинарных опционов».

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


Редактирован: 24 сентября 2015, 15:30
avatar

  14  beton2011 Автор Сообщений: 895

  • 24 сентября 2015, 15:20
+
0
Вот эта функция возвращает правильный тикет:


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int ticket()
  {
   int tik;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))tik=OrderTicket();
   return(tik);
  }


А почти тоже самое для лота, не возвращает нужный лот:


//+------------------------------------------------------------------+
//|              Last lot size                                       |
//+------------------------------------------------------------------+
double LastLot()
  {
   double lot=0;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))lot=OrderLots();
   return(lot);
  }
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 24 сентября 2015, 15:50
+
0
А почти тоже самое для лота, не возвращает нужный лот:


Наверно потому что последний тикет без значения лота,
там есть только -Прибыль-, может как то поменять значение лота на значение прибыли.

Но я повторяю, я не специалист в этом, так что громко не смейтесь над моими идеями :) 
avatar

  14  beton2011 Автор Сообщений: 895

  • 24 сентября 2015, 16:09
+
0
Я отладил еще 2 функции. Продолжаю дальше :) 
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 24 сентября 2015, 16:14
+
0
*good* 
avatar

  14  beton2011 Автор Сообщений: 895

  • 24 сентября 2015, 16:19
+
0
Вот эта функция возвращает правильный тикет...

AM2, эта функция верна только в том случае, если история в нужном порядке отсортирована в клиентском терминале. (сталкивалась уже с этим)

Редактирован: 24 сентября 2015, 20:12
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 24 сентября 2015, 20:11
+
0
Вот рабочий код, необходимо только до конца отладить функции, работающие с историей.


//+------------------------------------------------------------------+
//|                                                     TimeOpen.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Time Open expert advisor"

#include <stdlib.mqh>

//--- Inputs
extern int    BuySell        = 2;   // 0-бай. 1-селл. 2-бай/селл. 3-селл/бай
extern int    LossCount      = 1;   // количество лосей после которых увеличение лота
extern int    Count          = 1;   // количество открываемых ордеров
extern int    MAGIC          = 123; // магик

extern double Lots           = 1;   // лот
extern double KLot           = 2;   // увеличение лота
extern double MaxLot         = 50;  // максимальный лот

extern string t              = "Время";
extern int    t1             = 3;      // время 1
extern int    t2             = 3;      // время 2
extern int    t3             = 3;      // время 3
extern int    t4             = 3;      // время 4
extern int    t5             = 3;      // время 5
extern int    t6             = 3;      // время 6
extern int    t7             = 3;      // время 7
extern int    t8             = 3;      // время 8
extern int    t9             = 3;      // время 9

int tf[9],k=0;
datetime StartTime;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   StartTime=TimeCurrent();

   tf[0]=t1;
   tf[1]=t2;
   tf[2]=t3;
   tf[3]=t4;
   tf[4]=t5;
   tf[5]=t6;
   tf[6]=t7;
   tf[7]=t8;
   tf[8]=t9;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
void OpenOrd(int time)
  {
   int res,err;
   double ask=MarketInfo(OrderSymbol(),MODE_ASK);
   double bid=MarketInfo(OrderSymbol(),MODE_BID);

//--- sell conditions
   if(BuySell==1)
     {
      res=OrderSend(Symbol(),OP_SELL,Lot(),NormalizeDouble(bid,Digits),0,0,0,IntegerToString(time),MAGIC,0,Red);
      if(res<0)
        {
         err=GetLastError();
         Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА SELL: ",err,"(",ErrorDescription(err),")");
           } else {
         RefreshRates();
        }
      return;
     }
   Sleep(1000);

//--- buy conditions
   if(BuySell==0)
     {
      res=OrderSend(Symbol(),OP_BUY,Lot(),NormalizeDouble(ask,Digits),0,0,0,IntegerToString(time),MAGIC,0,Blue);
      if(res<0)
        {
         err=GetLastError();
         Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА BUY: ",err,"(",ErrorDescription(err),")");
           } else {
         RefreshRates();
        }
      return;
     }
   Sleep(1000);

//--- buy sell conditions
   if(BuySell==2)
     {
      //--- buy conditions
      if(LastDealType()==2 || LastDealType()==0)
        {
         res=OrderSend(Symbol(),OP_BUY,Lot(),NormalizeDouble(ask,Digits),0,0,0,IntegerToString(time),MAGIC,0,Blue);
         if(res<0)
           {
            err=GetLastError();
            Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА BUY: ",err,"(",ErrorDescription(err),")");
              } else {
            RefreshRates();
           }
         return;
        }
      Sleep(1000);

      //--- sell conditions
      if(LastDealType()==1 || LastDealType()==0)
        {
         res=OrderSend(Symbol(),OP_SELL,Lot(),NormalizeDouble(bid,Digits),0,0,0,IntegerToString(time),MAGIC,0,Red);
         if(res<0)
           {
            err=GetLastError();
            Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА SELL: ",err,"(",ErrorDescription(err),")");
              } else {
            RefreshRates();
           }
         return;
        }
      Sleep(1000);
     }

//--- sell buy conditions
   if(BuySell==3)
     {
      //--- sell conditions
      if(LastDealType()==1 || LastDealType()==0)
        {
         res=OrderSend(Symbol(),OP_SELL,Lot(),NormalizeDouble(bid,Digits),0,0,0,IntegerToString(time),MAGIC,0,Red);
         if(res<0)
           {
            err=GetLastError();
            Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА SELL: ",err,"(",ErrorDescription(err),")");
              } else {
            RefreshRates();
           }
         return;
        }
      Sleep(1000);

      //--- buy conditions
      if(LastDealType()==2 || LastDealType()==0)
        {
         res=OrderSend(Symbol(),OP_BUY,Lot(),NormalizeDouble(ask,Digits),0,0,0,IntegerToString(time),MAGIC,0,Blue);
         if(res<0)
           {
            err=GetLastError();
            Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА BUY: ",err,"(",ErrorDescription(err),")");
              } else {
            RefreshRates();
           }
         return;
        }
      Sleep(1000);
     }
//---
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastDealType()
  {
   int type=0;
   if(OrderSelect(3,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderType()==OP_BUY)
        {
         type=1;//buy  
        }
      if(OrderType()==OP_SELL)
        {
         type=2;//sell  
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Losses()
  {
   int loss=0;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) loss++;
        }
     }
   return(loss);
  }
//+------------------------------------------------------------------+
//|              Last lot size                                       |
//+------------------------------------------------------------------+
double LastLot()
  {
   double lot=0;
   if(OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()<0) lot=OrderLots();
     }
   if(lot==0) lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot;
   int i=OrdersHistoryTotal();
   if(OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
     {
      //if(OrderProfit()>0) break;
      if(OrderProfit()<0 && Losses()>=LossCount)
        {
         lot=LastLot()*KLot;
        }
     }
   if(lot>MaxLot || lot==0) lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(k>9) k=0;
   if(CountTrades()<Count)
     {
      OpenOrd(tf[k]);
      k++;
     }

   Comment("\n  Current Time: ",TimeToString(TimeCurrent(),TIME_SECONDS),
           "\n  Time Frame: ",tf[k],
           "\n  K: ",k,
           "\n  Lot: ",Lot(),
           "\n  Last Deal Type: ",LastDealType(),
           "\n  Losses: ",Losses(),
           "\n  Last Lot: ",LastLot());
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 24 сентября 2015, 13:52
+
0
avatar

  34  AM2 Сообщений: 15878 - Андрей

  • 24 сентября 2015, 16:52
+
0
Да все работает :) 

Спасибо вам за проделанную работу *bravo* 
avatar

  14  beton2011 Автор Сообщений: 895

  • 24 сентября 2015, 17:21
+
0
Все отлично. Вот только хотелось бы сделать так что бы после серии убытков, можно было самому выбрать следующий лот и только потом идет увеличение на Klot. По сути надо добавить еще одно значения лота для первого ордера после серии убытков.
avatar

  14  beton2011 Автор Сообщений: 895

  • 24 сентября 2015, 17:51
+
0
Андрей вы сможете сделать так как я просил в прошлом посте?

Это моя последняя просьба по этому советнику.
avatar

  14  beton2011 Автор Сообщений: 895

  • 25 сентября 2015, 13:04
+
0
Доброе время суток! У меня почему то советник не работает. Скажите в чём дело?
avatar

  9  YUREMAN Сообщений: 20 - .Юрий

  • 26 сентября 2015, 03:25
+
0
Доброе время суток! У меня почему то советник не работает. Скажите в чём дело? У вам смотрю на графике слева есть обозначения, а у меня нет.
avatar

  9  YUREMAN Сообщений: 20 - .Юрий

  • 26 сентября 2015, 03:35
+
0
У меня работает. Но конечно в минус. Такими входами рынок не обхитришь.

Но есть один большой плюс.

Наконец у нас есть мартин для бинарников. И это отличная основа для экспериментов со входом. И для начала предлагаю попробовать с фракталами.

Андрей, примишь от меня заявку, или подождем следующего месяца?
avatar

  10  session Сообщений: 165

  • 26 сентября 2015, 11:00
+
0
У меня работает. Но конечно в минус. Такими входами рынок не обхитришь.


У меня с первыми настройками за два дня получился хороший профит, вот только я заметил что иногда брокер не закрывает ордер по времени, наверно так делают специально *evil* 

И для начала предлагаю попробовать с фракталами.


Это хорошая идея. Можно скажем задавать направление по фракталам на Н4 таймфрейме, а ордера открывать на 60 минут, думаю были бы очень хорошие результаты <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; '>&nbsp; 

Андрей, примишь от меня заявку


*za* 
Редактирован: 26 сентября 2015, 12:25
avatar

  14  beton2011 Автор Сообщений: 895

  • 26 сентября 2015, 12:17
+
0
Да тоже было — экспирация на более длинную сбивалась. Я на 1 минуту ставил по 10 парам сразу, так тенденция быстрее рисуется.
Какие первые настройки имеются в виду?
Я вот так запускал.
avatar

  10  session Сообщений: 165

  • 26 сентября 2015, 12:44
+
+1
Да тоже было — экспирация на более длинную сбивалась.


Попробуйте выставлять разные магик для каждой пары.

Какие первые настройки имеются в виду?


Мои настройки. Ставил только продажи на 5-ть минут, увеличение ставки после пяти убыточных ордеров.

avatar

  14  beton2011 Автор Сообщений: 895

  • 26 сентября 2015, 13:08
+
0
beton2011, можешь объяснить с какой целью введен параметр «количество открываемых ордеров»?
Что это может дать?

У меня только одно предположение как можно его использовать. Активировать через некоторое время после выставления 1-ого ордера. Но что это даст пока не понял.
Редактирован: 28 сентября 2015, 11:51
avatar

  10  session Сообщений: 165

  • 28 сентября 2015, 11:45
+
0
можешь объяснить с какой целью введен параметр «количество открываемых ордеров»?
Что это может дать?


Для этого советника этот параметр ничего не значит.

Я сейчас сам пробую этот параметр на демо счете.
avatar

  14  beton2011 Автор Сообщений: 895

  • 28 сентября 2015, 12:42
+
0
Предлагаю клонировать этого сова, пол дела уже сделано.
ke_BO_Fractal 2.0
У него ограничения но посмотреть как торгует можно если еще не был установлен.
yadi.sk/d/DpMlfStpjLDPE
Советник строит фрактальную сетку на основании цены выбранной валютной пары. Сигнал на вход в сделку подается, когда текущий уровень цены достиг последнего фрактала. Не важно, было это касание или пробой. Направление ордера всегда противоположно направлению свечи.

Задаем серию, то есть открывается первая по сигналу, остальные открываются по принципу Мартингейла до тех пор, пока не закроется в плюс или не кончится серия

Вот в общем-то и тех задание…


Пока у меня работал дело шло очень не плохо.
Потом просто перестал открывать сделки…
Редактирован: 26 сентября 2015, 13:19
avatar

  10  session Сообщений: 165

  • 26 сентября 2015, 13:16

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари