0
индикатор: opentraders.ru/downloads/590/
там же описание!
avatar

Oxy

  • 11 февраля 2015, 11:51
0
//+------------------------------------------------------------------+
//|                                               LunumExp_mq4_3.mq4 |
//|                                                              Oxy |
//|                                   http://oxy.opentraders.ru/bio/ |
//+------------------------------------------------------------------+
#property copyright "Oxy"
#property link      "http://oxy.opentraders.ru/bio/"
#property version   "1.00"
#property strict
//------- Внешние параметры советника -----------------------------------------+
extern double BeginLot            = 0.1;       // Первоначальный лот
extern int    Drawdown            = 100;       // Просадка в пунктах, 0 - без просадки
extern int    PlusPoints          = 100;       // Сколько должна пройти цена в плюс в пунктах, чтобы мы выставили SL в безубыток
extern int    StepSL_plus         = 20;        // Шаг трала

extern int    Slippage   = 30;         // Проскальзывание цены
extern int    MagicNumber= 567882;     // Идентификатор ордера
//------- Глобальные переменные советника -------------------------------------+
string Symb;
double pricePointBuy = -1;
double pricePointSell= -1;
int    lastLossTicket= -1;
double lotBuy =BeginLot;
double lotSell=BeginLot;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if (!IsTradeAllowed()) { Print("Необходимо разрешить советнику торговать"); return(INIT_FAILED);}  
   if(PlusPoints-MarketInfo(Symbol(), MODE_STOPLEVEL)<=StepSL_plus) { Print("Неправильно выставлены значения безубытка"); return(INIT_FAILED);}  
   Symb = Symbol();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    // если нет позиций buy - открываем их
    if(notOpenPos(0)){
      lotBuy = BeginLot;
      BuyPos();
    }
    // если нет позиций sell - открываем их
    if(notOpenPos(1)){
      lotSell= BeginLot;
      SellPos();
    }
    // в прибыли - трал
    if(Ask>=pricePointBuy +PlusPoints*Point && PlusPoints>0) {pricePointBuy  = pricePointBuy +StepSL_plus*Point;  changePos (0); }
    if(Bid<=pricePointSell-PlusPoints*Point && PlusPoints>0) {pricePointSell = pricePointSell-StepSL_plus*Point;  changePos (1); }
    // в убытках - удвоение
    if(Ask<=pricePointBuy -Drawdown*Point && Drawdown>0){ lotBuy = lotBuy*2;  BuyPos();  }
    if(Bid>=pricePointSell+Drawdown*Point && Drawdown>0){ lotSell= lotSell*2; SellPos(); }
    
    // Если закрылся трал - то закрываем подобные ордера
    if (isClosePosByLoss()) CloseOrders(OrderType());
  }
//+------------------------------------------------------------------+
bool notOpenPos (int typeOrder) {
  int i;
  for (i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symb && OrderMagicNumber()==MagicNumber) {
        if(OrderType()==typeOrder) {
          return(false);
        }
      }
    }
  }
  return (true);
}
//+------------------------------------------------------------------+
void changePos (int typeOrder) {
  int i, ot;
  double sl;
  for (i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symb && OrderMagicNumber()==MagicNumber) {
        ot = OrderType();
        if(ot==0 && ot==typeOrder) {
          if(OrderStopLoss()==0) sl = OrderOpenPrice() + StepSL_plus*Point;
          else sl = OrderStopLoss() + StepSL_plus*Point;
          
          if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sl,Digits), 0, 0)) Print ("Не удалось изменить ордер ", OrderTicket());
          lotBuy = BeginLot;
        }
        if(ot==1 && ot==typeOrder) {
          if(OrderStopLoss()==0) sl = OrderOpenPrice() - StepSL_plus*Point;
          else sl = OrderStopLoss() - StepSL_plus*Point;
          
          if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sl,Digits), 0, 0)) Print ("Не удалось изменить ордер ", OrderTicket());
          lotSell= BeginLot;
        }
      }
    }
  }
}
//+------------------------------------------------------------------+
bool BuyPos() {
  double sl=0, tp=0;
  int ticket = OrderSend(Symb, OP_BUY, lotBuy, NormalizeDouble(Ask,Digits), Slippage, NormalizeDouble(sl,Digits), NormalizeDouble(tp,Digits), NULL, MagicNumber); 
  if (ticket == -1) return(false);
  if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) pricePointBuy  = OrderOpenPrice();
  return (true);
}
bool SellPos() {
  double sl=0, tp=0;
  int ticket = OrderSend(Symb, OP_SELL, lotSell, NormalizeDouble(Bid,Digits), Slippage, NormalizeDouble(sl,Digits), NormalizeDouble(tp,Digits), NULL, MagicNumber); 
  if (ticket == -1) return(false);
  if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) pricePointSell = OrderOpenPrice();
  return (true);
}
//+------------------------------------------------------------------+
bool isClosePosByLoss() {
  int i,  k=OrdersHistoryTotal();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderMagicNumber()==MagicNumber && OrderSymbol()==Symb){
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if(OrderTicket()==lastLossTicket) return(false);
          else if (OrderTicket()!=lastLossTicket) {
            //_______________________
            if(OrderType () == OP_BUY) {
              if(OrderClosePrice() <= OrderStopLoss() )
                {lastLossTicket = OrderTicket(); return(true);} // закрылись в Loss
            }
            if(OrderType() == OP_SELL) {
              if(OrderClosePrice() >= OrderStopLoss() && OrderStopLoss() != 0)
                {lastLossTicket = OrderTicket(); return(true);} // закрылись в Loss
            } 
            //_______________________
          }
        }
      }
    }
  }
  return(false);
}
//+------------------------------------------------------------------+
void CloseOrders(int ot) {
  int i, k=OrdersTotal();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Symb && OrderMagicNumber()==MagicNumber && ot==OrderType()) {
        if (ot==0) {          
          if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage)){
            Print("Не удалось закрыть позицию ", OrderTicket());
          }
        }
        if (ot==1) {          
          if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage)){
            Print("Не удалось закрыть позицию ", OrderTicket());
          }
        }
      }
    }
  }
}
//+------------------------------------------------------------------+
avatar

Oxy

  • 11 февраля 2015, 02:57
0
Я про всех помню — у меня записано, одновременно делать не умею :D , по очереди. Будет что непонятно, обращайтесь. Или если не так где-то отработает, сразу пишите — кода было много, могла запутаться.
avatar

Oxy

  • 10 февраля 2015, 23:49
0
В MT4 еще никто не жаловался. Я тестирую на market
avatar

Oxy

  • 10 февраля 2015, 23:47
+3
AM2 занят, я сделаю на этой неделе
avatar

Oxy

  • 10 февраля 2015, 23:44
0
советник, там же подробное описание:
opentraders.ru/downloads/589/
avatar

Oxy

  • 10 февраля 2015, 18:23
0
Вы газеты почитайте, там 80% объявлений, которые якобы от банков — пирамиды.
avatar

Oxy

  • 10 февраля 2015, 16:06
0
сделаю
avatar

Oxy

  • 10 февраля 2015, 12:19
0
Могу поправить пункт 2 только.
Пункт 1 — нигде не заметила противоречия заданию. Это нам кажется, что скользящие сливаются. Программа там видит, что там есть просвет. Плюс у МА хвост же перерисовывается. Открыться позиция могла, когда расстояние от ma5 до ma20 было значительным, но потом цена чуть вернулась и расстояние у ма уменьшилось.
У скрина из пункта 3 первая белая свеча в вашем красном квадрате прошла расстояние больше maxPointsToMA (= 130; // Max от пересечения MА до открытия ордера в пунктах).
avatar

Oxy

  • 10 февраля 2015, 12:07
0
На один 0 везде меньше.
avatar

Oxy

  • 10 февраля 2015, 11:54
0
Проверяйте на ошибки по все тем же 11-ти первым пунктам: opentraders.ru/downloads/583/
avatar

Oxy

  • 10 февраля 2015, 02:58
0
Если что-то подразумевал другое, пишите, переделаю:
opentraders.ru/downloads/587/
avatar

Oxy

  • 10 февраля 2015, 00:46
0
Хорошо, сделаю. Вы видели, что в том советнике, если указать параметр
ClosePosition       = 200;       // Через сколько пунктов закрываем позицию и открываем новую, 0 - не будет закрытия

то через 200 пунктов произойдет закрытие позиции и открытие новой такой же. Это оставляем?
avatar

Oxy

  • 9 февраля 2015, 13:12
+1
1. Нет такого понятия как
ТрейдингСтоп

Трейдинг — это английское слово — trading — торгующий

Не путайте, пожалуйста, никого этим названием.
Трейлинг стоп
От английского слова — trailingскользящий!

2.
В любом случае, сделка рано или поздно, закроется, т.к. цена продет коррекцию в 500 пунктов. Сделка закроется хотя бы в 0 или в прибыль.

Крайне неверное утверждение. Вот так и происходит слив депозита.
(Не удивлюсь, если вы не поверите)

3. Вы точно отказались от предыдущей идеи?
Мы только там пришли к общему знаменателю. И даже на выраженном нисходящем/восходящем движении на ней вы сможете заработать.

4.
Торгуем 1%

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

Итак, по данной идее. Учитывая недопонимание в предыдущем топике, не могли бы вы проиллюстрировать данный топик на примерах?
Рыночная цена 1,13501, запускаем советник, указываем ему в пунктах buy stop и sell stop 200 пунктов от цены. Цена пошла вверх, сработал buy stop — купили 1,135701… и т.д.
Вас не затруднит так написать? Чтобы сразу для вас запрограммировать то, что нужно.
avatar

Oxy

  • 9 февраля 2015, 00:31
0
Поняла, переходим на следующую. Здесь тему считаем пока завершенной
avatar

Oxy

  • 9 февраля 2015, 00:04
0
Так понятно ) Сделаю. Вы еще новый топик опубликовали. Там уже следующая идея, правильно? Запрограммирую эту, возьмусь за новую.
avatar

Oxy

  • 8 февраля 2015, 23:55