+2
«Я прихожу к выводу, что такой ситуации в принципе не могло быть. Имея 5,6 млн руб. я, благодаря вашей системе, умудрился купить $162,8 млн, потерять все свои деньги и залезть в долг на 9,5 млн руб. При этом я физически у банка не получил ни копейки», — сказано в претензии Громова в «Альфа-банк»

Что то мне подсказывает если бы он не слил, а заработал, то этот вопрос его бы не интересовал :D 
avatar

pacak

  • 4 февраля 2016, 16:29
+1
Бесплатный совет. При запоминании пин-кодов, паролей и записывании их в телефон, на бумажку и т.п.

Допустим наш пароль: H78&mGy
Добавляем любой символ спереди и любой сзади, получим: KH78&mGy9
Для себя запоминаем что при записи пароля куда-либо всегда первый и последний символы отбрасываем при использовании.

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

Любой нестандартный вариант существенно усложнит жизнь злоумышленнику.
avatar

pacak

  • 2 февраля 2016, 22:21
0
У тебя флеш переглючил. Все показывает:
avatar

pacak

  • 2 февраля 2016, 11:56
0
Вот что действительно было бы хорошей штукой в Пепелаце, это задержка открытия следующей сети ордеров, значение которой можно было бы регулировать и вынести в переменные задаваемые пользователем.

К примеру закрылся ордер, тот, с которого стартовала сетка, первый рыночный (по стопу или тейку, неважно), и после этого события отдыхаем N-цать минут, и как они истекут, уже ждем наступления сигнала и снова в бой *budenov* 
avatar

pacak

  • 30 января 2016, 19:10
+1
Я доработал Пепелаца, выложу на неделе в своей теме с пояснениями для теста. Настроек стало много, советник очень гибко настраиваемый.
avatar

pacak

  • 30 января 2016, 18:53
+1
США в нынешних границах пяти лет не протянут.
Однако ж немало вы выпили *crazy* 
avatar

pacak

  • 29 января 2016, 21:56
+1
Домен вы оригинальный выбрали *crazy* 
Провалю.клуб

Неоптимистичные инвестиции какие-то *haha*  Как вы яхту назовете…

Навеяло:
С какой целью берется плата? — Э-э, с целью ремонта провала, чтобы не слишком проваливался! (с) 12 Стульев
avatar

pacak

  • 24 января 2016, 16:34
0
Исправлено. Проверяйте.
avatar

pacak

  • 24 января 2016, 16:27
0
Решено наполовину!
Решено полностью!
avatar

pacak

  • 22 января 2016, 00:51
0
При тесте на демо (и на реале :)  ) вылезла следующая ошибка:
Открылась сетка по сигналу. Закрыли терминал МТ4.
При перезапуске терминала советник модифицирует стоп у имеющегося в рынке ордера и удаляет все отложки сети:

2016.01.21 22:17:25.271 Custom indicator MA_Chanels_FIBO_Pepelac USDCAD,M5: loaded successfully
2016.01.21 22:17:25.291 Expert pepelats_am2_5_or USDCAD,M5: loaded successfully
2016.01.21 22:17:26.989 '10116295': login on Alpari-Nano through nano.ru.0a (ping: 48.98 ms)
2016.01.21 22:17:27.886 '10116295': login datacenter on Alpari-Nano through nano.ru.0a (ping: 48.98 ms)
2016.01.21 22:17:28.000 '10116295': previous successful authorization performed from IP

2016.01.21 22:17:32.001 '10116295': modify order #1745474749 buy 0.01 USDCAD at 1.4318 sl: 1.4198 tp: 1.4418 -> sl: 0.0020 tp: 1.4418
2016.01.21 22:17:32.183 '10116295': order #1745474749 buy 0.01 USDCAD at 1.4318 was modified -> sl: 0.0020 tp: 1.4418

И после этого порезались все отложки:

2016.01.21 22:17:32.183 '10116295': delete pending order #1745474752 buy limit 0.01 USDCAD at 1.4258 sl: 1.4198 tp: 1.4358
2016.01.21 22:17:32.383 '10116295': pending order #1745474752 was deleted
2016.01.21 22:17:32.383 '10116295': delete pending order #1745474751 buy limit 0.01 USDCAD at 1.4278 sl: 1.4198 tp: 1.4378
2016.01.21 22:17:32.593 '10116295': pending order #1745474751 was deleted
2016.01.21 22:17:32.613 '10116295': delete pending order #1745474750 buy limit 0.01 USDCAD at 1.4298 sl: 1.4198 tp: 1.4398
2016.01.21 22:17:32.795 '10116295': pending order #1745474750 was deleted
avatar

pacak

  • 21 января 2016, 22:40
0
Промежуточная версия Пепелаца с настройками для счета с 4-х знаками, пара USDCAD, Альпари. Все параметры промежуточные, приблизительные и могут быть неточны. И даже очень.
В индикаторе MA_Channels_FIBO_Pepelac значение fibo_red по умолчанию для канадской пары должно быть равно 95.

Добавлен параметр BUPoint (кол-во пунктов безубытка)

//+------------------------------------------------------------------+
//|                                                     Pepelats.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Simple expert advisor"

//--- Inputs (параметры для 4-х знаков)
extern double Lots      = 0.1;      // лот
extern int Stops        = 0;        // 0-стоп на одной цене. 1-лось каждому ордеру
extern int StopLoss     = 120;      // лось
extern int TakeProfit   = 100;      // язь
extern int Count        = 3;        // число отложек
extern int Step         = 20;       // шаг отложек
extern int Magic        = 123;      // магик
extern int Slip         = 3;        // реквот
extern int Expiration   = 24000;    // истечение отложек в часах
extern string BU="Безубыток";
extern int BULevel      = 65;       // уровень включения БУ
extern int BUPoint      = 10;       // пунктов БУ
extern string IndName="MA_Chanels_FIBO_Pepelac";
extern int Buff         = 1;        // 1-61.8, 2-50, 3-38.2, 4-23.5
extern int BarsCount    = 500;      // баров для расчета индикатора
extern int MAPeriod     = 100;      // период МА


int OrdType=0;
double Stop=0,MarketPrice=0;
datetime TimeOpen=0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
  
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
  
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr;
   double sl=0,tp=0;
   datetime expiration=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(type>1 && Stops==0) sl=NormalizeDouble(Stop,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(type>1 && Stops==0) sl=NormalizeDouble(Stop,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   if(type==2 || type==3) expiration=TimeCurrent()+3600*Expiration;
   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,expiration,clr);
   return;
  }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   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()==type) count++;
           }
        }
     }
   return(count);
  }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 DelOrder()
  {
   bool del=true;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime LastOrderOpenTime()
  {
   datetime t=0;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
        {
         if(OrderProfit()>0)//tp  
           {
            t=OrderOpenTime();
           }
        }
     }
   return(t);
  }  

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
//Здесь делаем нормализацию, чтоб небыло ошибки OrderModify Error 1                               
               if(OrderStopLoss()!=NormalizeDouble(MarketPrice+BUPoint*Point,Digits))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),MarketPrice+BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderStopLoss()!=NormalizeDouble(MarketPrice-BUPoint*Point,Digits))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),MarketPrice-BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
  
  
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int i=0;
   double up=0,dn=0;


// Перемещаем это условие вперед. Удаляем ордера ДО выставления новой сетки
// Этот кусок активируем если БУ=false
/*
   if(LastOrderOpenTime()>=TimeOpen)
     {
      DelOrder();
     }
*/

// Это условие выхода с БУ
   if(CountTrades()>0 && ((OrdType==0 && Bid-MarketPrice>BULevel*Point) || (OrdType==1 && MarketPrice-Ask>BULevel*Point)))
     {
      BU();
      DelOrder();
     }

// Допишу   
   if(Buff==1)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,0,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,7,1);
     }

   if(Buff==2)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,1,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,6,1);
     }

   if(Buff==3)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,2,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,5,1);
     }

   if(Buff==4)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,3,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,4,1);
     }

   if(CountTrades()<1)
     {
      if(Ask<dn && CountOrders(2)<1)//бай и бай лимит
        {
         PutOrder(0,Ask);
         TimeOpen=TimeCurrent();
         Stop=Ask-StopLoss*Point;
         MarketPrice=Ask;
         OrdType=0;

         for(i=1; i<=Count;i++)
           {
            PutOrder(2,Ask-Step*Point*i);
           }
        }
      if(Bid>up && CountOrders(3)<1)//селл и селл лимит
        {
         PutOrder(1,Bid);
         TimeOpen=TimeCurrent();
         Stop=Bid+StopLoss*Point;
         MarketPrice=Bid;
         OrdType=1;

         for(i=1; i<=Count;i++)
           {
            PutOrder(3,Bid+Step*Point*i);
           }
        }
     }

/*     
   Comment("\n Stop: ",Stop,
           "\n MarketPrice: ",MarketPrice,
           "\n OrderType: ",OrdType);
*/           
  }
//+------------------------------------------------------------------+

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

Спасибо АМ2 за роботизацию Пепелаца! *friends* 
КУ ТОВАРИЩИ!
avatar

pacak

  • 21 января 2016, 17:43
0
Ждите конечную версию. Я работаю над советником, не все сразу.
Я брал эту версию и тестировал, потом внося изменения. У меня работала и в начальном варианте, я не знаю почему не работает у вас *???* 

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

pacak

  • 21 января 2016, 17:05
+1
А вот на затравку, чтоб слюни текли.

Отработка шикарного сигнала USDCAD 20.01.2016
Уффф. Сигнальчик горячий, с пылу с жару, прям свежий свежий… А запах… Понюхайте: Мммм… Так вкусно пахнет профитом… Три сотни пунктов за час и вы несетесь радостно на Пепелаце как господин Пэжэ!

avatar

pacak

  • 21 января 2016, 00:46
0
Спасибо! *friends*  Подождем. Нынешний вариант тоже весьма и весьма рабочий. Возможно я что то придумаю сам, но очень в этом сомневаюсь *rabota*  Все таки три дня практики и знакомства с MQL *bildbody* 

Поищу ошибки нынешнего варианта. Еще раз СПАСИБО!
Вы дали автоматическую жизнь моей стратегии!

P.S. Для Oxy:
да, эта добавление действительно очень стоящая штука, т.к. очень часто цена проходит от первого ордера на определенную величину. Подождем, что-нибудь придумаем. Рынок от нас не убежит <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/003.gif' alt=' :D '>&nbsp; 
avatar

pacak

  • 21 января 2016, 00:20
+2
В ходе теста выявил критическую ошибку, приводящую к трагическим последствиям и искажениям результатов теста.

Иногда возникают ситуации, когда ордер закрывается по тейку в зоне сигнала на следующее открытие, и сразу открывается другая сетка. Ордера предыдущей сетки при этом НЕ закрываются, т.к. условие закрытия уже не срабатывает!

Долго думал и решал, что не так. По прошествии суток адских мозговых усилий с внедрением каких только извращений, в т.ч. и применения задержек исполнения и тэдэитэпэ… Пока до меня не дошло просто сесть и пошагово в мозгу прокрутить написанный код. И о чудо! На меня снизошло озарение! Как всегда, все гениальное — ПРОСТО!

Закрытие ордера происходит по этому условию:
if(LastOrderOpenTime()>=TimeOpen)
     {
      DelOrder();
     }


Итак, решение проблемы:
ПЕРЕМЕЩАЕМ это условие в начало функции void OnTick()

Вот как должен получиться правильный рабочий вариант
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int i=0;
   double up=0,dn=0;


//Перемещаем это условие вперед и делаем его первичным!
   if(LastOrderOpenTime()>=TimeOpen)
     {
      DelOrder();
     }
   
   
   if(Buff==1)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,0,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,7,1);
     }

   if(Buff==2)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,1,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,6,1);
     }

   if(Buff==3)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,2,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,5,1);
     }

   if(Buff==4)
     {
      up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,3,1);
      dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,4,1);
     }

   if(CountTrades()<1)
     {
      if(Ask<dn && CountOrders(2)<1)//бай и бай лимит
        {
         PutOrder(0,Ask);
         TimeOpen=TimeCurrent();
         Stop=Ask-StopLoss*Point;
         
         for(i=1; i<=Count;i++)
           {
            PutOrder(2,Ask-Step*Point*i);
           }
        }
      if(Bid>up && CountOrders(3)<1)//селл и селл лимит
        {
         PutOrder(1,Bid);
         TimeOpen=TimeCurrent();
         Stop=Bid+StopLoss*Point;

         for(i=1; i<=Count;i++)
           {
            PutOrder(3,Bid+Step*Point*i);
           }
        }
     }


   Comment("\n Stop: ",Stop);

  }
//+------------------------------------------------------------------+

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

pacak

  • 21 января 2016, 00:13
0
Доработка (если она возможна):

Безубыток (true/false)
true:
Если цена прошла в прибыльную сторону Х пунктов от цены первого рыночного ордера, удаляем все отложки, а на открытых ордерах выставляем стопы в бу на едином уровне Y пунктов от цены первого рыночного ордера.
false:
Пропускаем это условие, безубыток не включается.
— Параметры:
Безубыток: true/false
Включение безубытка на уровне (считая от цены первого ордера): X пунктов
Пунктов безубытка (считая от цены первого ордера): Y

Картинка:


Разбирая результаты тестирования, примерно 80% стопов на USDCAD можно было бы избежать, включая такой безубыток на уровне примерно 65-70 пунктов для этой пары.
avatar

pacak

  • 19 января 2016, 17:47
0
а теперь хочу посмотреть сколько времени и сил уйдет у вас на это, чтобы вы подумали в следующий раз перед тем как изменять ТЗ.

Прошу извинить, я виноват.
К сожалению моих сил, а главное моих знаний и ума не хватит написать на MQL такой алгоритм. Я индикатор то когда изменял, почти весь день изучал на примерах и потом тестировал чтобы правильно работал, а такой советник мне точно не по зубам. Спасибо Вам, я поступил опрометчиво.
Больше ТЗ изменяться не будет, этот алгоритм самая золотая середина, то что нужно, он просто шикарно выполняет свою функцию *drinks* 

А дополнение к уже имеющимся функциям советника можно озвучить? Алгоритм ТЗ при этом не меняется, просто выставляется определенным образом безубыток. Если будет трудоемко, тогда фиг с ним, просто устойчивость стратегии по нему будет существенно выше за счет очень маленького кол-ва стопов. В любом случае, можно послать меня нафиг в любой момент *stesnitelno* 
avatar

pacak

  • 19 января 2016, 16:48
0
Начну с конца:
3. Если по тейку закрывается первый ордер (с которого началась сетка), то все отложенники удаляются. Это очень важное правило!

Не всегда удаляются отложки по этому условию:
if(Last()==1 && ((Bid>=Price+TakeProfit*Point && Type==0) || (Ask<=Price-TakeProfit*Point && Type==1))) DelOrder();


Уже открылась новая сетка в другую сторону, а отложки на продажу еще висят.

Можно изменить это условие?
При первом же тейке любого ордера сетки все отложки удаляются. Неважно какой по счету ордер тейкнулся. Есть один тейк — все отложки удаляются.
2. Настройка уровня отбоя (крайне важная штука). По умолчанию в индикаторе стоит 61,8%, который рисуется красной линией. Я сейчас переделал индикатор в силу своих способностей, там эти уровни задаются переменными: www.opentraders.ru/downloads/1012/
В моем индикаторе есть переменная fibo_red=61.8
Можно ее вынести в советника? Она отвечает как раз за эту отбойную линию.

extern int Buff = 1; // 1-61.8, 2-50, 3-38.2, 4-23.5
Это немного не то что я хотел :) 
В старом индикаторе есть именно эти уровни 1-61.8, 2-50, 3-38.2, 4-23.5. Но они не играют никакой роли. Это просто цифры, которые мы не можем поменять. По большому счету кроме красной линии остальные нам и не нужны.

В моем новом индикаторе мы можем поставить значение fibo_red=61.8 (и красная линия будет как в старом индюке), так и 97, так и 122, т.е. абсолютно независимые фибо-значения, в отличии от старого варианта.
Вот старый индюк fibo_red=61.8:

Вот мой индюк. Я могу менять красную линию — fibo_red=92

Красная линия существенно сдвинулась, и мы будем ловить отскок от нее! Вот поэтому хотелось бы вынести это значение fibo_red в советник. Т.е самому задавать значение от которого будем отскакивать, а не держаться в рамках заданных старым индикатором. Не 1=61.8, 2=50 и т.д., а именно само значение 61.8, 92, 123 и т.п.
В разных валютах эти значения отскока разные, от 61.8 отскакивают единицы и очень очень редко с очень нестабильным результатом, для USDCAD к примеру лучше 95. Для евро другие. Вот поэтому этот уровень очень важен как переменный параметр.
Со старым индикатором такой фокус не пройдет, увы.
1. Неправильно ставятся стопы у лимитных ордеров. Стоп у всей сетки должен быть один, на цене стопа первого рыночного ордера. В этом варианте у каждого ордера свой стоп в 500 пунктов от цены их открытия.

Кажется работает.
Но при выборе «0 — стопы на одной цене» ставит стопы отложек чуть больше стопа первого рыночного ордера на величину спреда.

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

pacak

  • 18 января 2016, 16:39
+2
Сам нашел и кажется сам решил эту проблему, на первый взгляд вроде так как надо теперь <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/003.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/003.gif' alt=' :D '>&nbsp; '>&nbsp; 
В коде:

if(CountTrades()<1)
     {
      if(Ask<dn && CountOrders(2)<1)
        {
         PutOrder(0,Ask);
         for(i=0; i<=Count;i++)
           {
            PutOrder(2,Ask-Step*Point*i);
           }
        }
      if(Bid>up && CountOrders(3)<1)
        {
         PutOrder(1,Bid);
         for(i=0; i<=Count;i++)
           {
            PutOrder(3,Bid+Step*Point*i);
           }
        }
     }


Надо заменить в обеих строках
for(i=0; i<=Count;i++)
на
for(i=1; i<=Count;i++)

Cейчас потестирую поподробнее в разных ситуациях.
Добавлено чуть позже: Да, теперь как надо. Я молодец *bravo* 
avatar

pacak

  • 17 января 2016, 20:41