0
есть рыночный ордер.
бай на уровне 1.30000 с ТП на 1.30100. После его закрытия ставится ордер в притивоположную сторону селл стоп на уровне 1.30000
селл на уровне 1.29000 с ТП 1.28900. После его закрытия ставится ордер бай стоп на уровне 1.29000

Оказалось проще написать с нуля чем разбираться в чужом коде.





Файл в базе: www.opentraders.ru/downloads/528/

avatar

AM2

  • 13 декабря 2014, 21:36
0
СМСку слать с терминала на ВПС это еще реально.
avatar

AM2

  • 13 декабря 2014, 21:29
0
а я че я ни че *pardon* 
avatar

AM2

  • 13 декабря 2014, 19:55
0
MetaTrader 4 для Android предоставляет только тот набор функций, который был заложен разработчиком. Чтобы дорабатывать программу нужно иметь исходники МТ4 и соответствующий компилятор.
avatar

AM2

  • 13 декабря 2014, 17:58
0
Советник запустил. Можно где то посмотреть описание настроек? Это бы сэкономило мне массу времени.

avatar

AM2

  • 13 декабря 2014, 17:35
+1
35 error(s), 18 warning(s) Не хило!*shock* 
avatar

AM2

  • 13 декабря 2014, 16:25
0
Звуковые алерты поддерживаются только на:

MetaTrader 4 Mobile под управлением Windows Mobile OS
MetaTrader 4 Mobile Smartphone Edition — мобильный терминал для смартфонов под управлением MS Windows Mobile

Информация с официального сайта:
www.metaquotes.net/ru/metatrader4/mobile_trading
avatar

AM2

  • 13 декабря 2014, 15:59
0
Такой алгоритм? Обновите ссылку на советник пожалуйста, не скачивается.
Или напишу заново.

Если нет ордеров покупаем с рынка.
Если открыт бай и закрылся по ТП покупаем с рынка.
Если открыт бай и закрылся по СЛ продаем с рынка.
Если открыт селл и закрылся по ТП продаем с рынка.
Если открыт селл и закрылся по СЛ покупаем с рынка.

avatar

AM2

  • 13 декабря 2014, 15:41
0
Посмотрите вариант.


//+------------------------------------------------------------------+
//|                                                        Delta.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Forex expert advisor"

//--- Inputs
extern int    Delta   = 200;  // расстояние до ордера и стопы
extern int    Slip    = 30;   // проскальзывание ордера
extern int    Try     = 5;    // количество попыток выставить ордер
extern double Lots    = 0.1;  // объем позиции
extern double MaxLot  = 5;    // максимальный объем позиции
extern double TickVol = 11.5; // тиковый объем
extern int    MAGIC   = 333;  // магик
double lot;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void PutOrder()
  {
   int    res,b,s,err;
   double price;   
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUYSTOP)b++;
         if(OrderType()==OP_SELLSTOP)s++; 
        }
      }
    }
    
   //--- buy
   if(b<1)
    {
     price=Ask+Delta*Point;
     res=OrderSend(Symbol(),OP_BUYSTOP,Lot(),fND(price),Slip,fND(price-Delta*Point),fND(price+Delta*Point),"",MAGIC,0,Blue);
      if(res<0)
        {
         Print("Ошибка: ",GetLastError());
         err++;
         Sleep(500);
         RefreshRates();
        }
      else
         Print("OK Order BUYSTOP");     
    }             
                    
   //--- sell 
   if(s<1)
    {
     price=Bid-Delta*Point;
     res=OrderSend(Symbol(),OP_SELLSTOP,Lot(),fND(price),Slip,fND(price+Delta*Point),fND(price-Delta*Point),"",MAGIC,0,Red);
      if(res<0)
        {
         Print("Ошибка: ",GetLastError());
         err++;
         Sleep(500);
         RefreshRates();
        }
      else
         Print("OK Order SELLSTOP");     
    }
   if (err>Try) return;  
  }
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del; 
   for(int i=OrdersTotal()-1;i>=0;i--)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if (OrderType()==OP_BUYSTOP)  del=OrderDelete(OrderTicket()); 
         if (OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());       
        }
      }
    }     
  }
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double Lot()
  {  
   if(OrdersHistoryTotal()==0)
    {
     lot=Lots;
    }             
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))      
     {                                       
      if(OrderProfit()>0)                     
       {
        lot=Lots;  
       }
      if(OrderProfit()<=0)
        {
         lot=OrderLots()*2;  
        }
     }
    if(lot>MaxLot)lot=MaxLot;            
   return(lot);
  } 
//+------------------------------------------------------------------+
void ClosePos()
  {
   double tickvol=MarketInfo(Symbol(),MODE_TICKVALUE);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(tickvol>=TickVol)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(tickvol>=TickVol)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }  
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
    
     if(CountTrades()<1)PutOrder();
     if(CountTrades()>0)DelOrder();
     if(TickVol>0) ClosePos();   
//---
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 13 декабря 2014, 09:22
+2
Пивот уровни на Форекс

Пивот уровни (пивот точки, Pivot Points, PP) – это индикаторы точек разворота, когда трейдер прогнозирует рост или падение цены до определённого уровня. РР используются профессиональными трейдерами для определения уровней поддержки и сопротивления. Проще говоря, сами точки и пивот уровни показывают области, где возможен разворот цены.

Кто торгует на РР? Чаще всего краткосрочные трейдеры. Торговать можно как на пробой, так и во флэте. Давайте рассмотрим как правильно построить РР.
Расчёт пивот уровней и нанесение на график

Формулы для расчёта РР:

Resistance 1 или R1 (сопротивление 1) = (Рх2) — min
Resistance 2 или R2 (сопротивление 2) = P + max-min
Resistance 3 или R3 (сопротивление 3) = max + 2x(P-min)

Support 1 или S1 (поддержка 1) = (Рх2) — max
Support 2 или S2 (поддержка 2) = P – max + min
Support 3 или S3 (поддержка 3) = min – 2x(max-P)

P (главный пивот уровень) = (max + min + close)/3

где max – максимальная цена, min – минимальная цена, close – цена закрытия. Все указанные значения мы берём из анализируемого временного интервала.

Наносить РР на график нужно следующим образом:

1. желательно брать график цены за наиболее близкий предыдущий период, что определяется временным интервалом (D1, W1, MN).
2. определяем параметры максимальной, минимальной и цены закрытия, после чего просчитываем уровни: поддержки, сопротивления и пивот. Можно воспользоваться готовым индикатором. Описание настроек смотрите ниже.
3. наносим все значения на график цены.
Особенности торговли на пивот уровнях

Чаще всего РР используются как обычные уровни поддержки и сопротивления. Цена будет тестировать их, иногда отскакивать, иногда несильно пробивать и снова отскакивать. Чем крепче уровень – тем больше количество отскоков от него цены. В идеале, цена рано или поздно пробивает один из уровней, и тогда сопротивление становится поддержкой и наоборот.

Суть использования РР в том, чтобы при приближении цены в S1 есть смысл открыть длинную сделку, а при приближении к R1 – короткую. Но возможен вариант, когда цена пробила все 3 уровня и ушла дальше. В таком случае можно попробовать сыграть на повторном тестировании (касании) уровней, которое случается довольно часто.
Если цена пробила все 3 уровня и ушла дальше, то, скорее всего, мы видим зарождение нового тренда. Стоит использовать дополнительные сигналы, чтобы подтвердить или отрицать это.
Индикатор Пивот Уровней

Существует классный индикатор для определения РР – называется «All Pivot Point» (скачать индикатор). На график выводятся 6 параллельных линий: 3 выше тренда (цены) – зелёного цвета, и 3 ниже – красного. Уровни меняются раз в сутки.


Рис.1

Интересной особенностью данного индикатора является возможность настройки трейдером видов уровней на графике: пивот, Фибоначчи, Woodie, Camarilla, ДеМарка. Для этого в поле TypePivot меняем цифру с 0 до 4:

0 – отображаются только РР.
1 – уровни Фибоначчи.
2. – Camarilla уровни.
3. – Woodie уровни.
4. – уровни ДеМарка.

Неплохо, да?
Есть также поле Weekend: параметр true — отключает, а false – включает учёт выходных при расчётах.

Индикатор работает только на интервалах меньше дневного. Если вы ошибочно включите его на D1 или выше, то появится надпись, призывающая вас уменьшить таймфрейм.

Цвет уровней (линий индикатора) можно менять. Удобней всего использовать канальные стратегии (пробой или разворот), но можно установить на тот же график несколько индикаторов All Pivot Point. При этом нужно сменить цвет линий для каждого из индикаторов.
Другие особенности пивот уровней

Факты в пользу РР:

1. используются трейдерами известных банков и фонжов.
2. имеют большой процент правильных прогнозов.
3. популярны уже более 70-и лет.
4. просты в вычислении либо автоматизированы (индикаторы).

Недостатки:

1. предполагают уточнение сигналов от других индикаторов.
2. трудно найти правильную точку отсчёта, когда цена находится в нормальной волатильности и не движется в тренде.

В целом, пивот уровни – надёжный и интересный инструментя для трейдера. Надеемся, вы пополните свою коллекцию индикаторов и увеличите прибыль с рынка Форекс. и помните, что прибыльность торговли очень сильно зависит от выбранного вами брокера!

В архиве 2 индикатора:

www.opentraders.ru/downloads/527/

1. «All Pivot Point»
2. «AllPivots_v2.1_combined»
С возможностью совмещать на одном графике разнопериодные пивоты.
Входные параметры:

CountPeriods=10; количество дней отображения
TimePeriod=«Н4»; период для расчета пивотов
Plot_pivots=true; если false, то только пивоты будут, без уровней
Plot_middle=false; отображение срединных уровней
Plot_camarilla=false; встроеные уровни камарилла
avatar

AM2

  • 13 декабря 2014, 08:40
0
Добавил вывод в БУ. Обновил советник в базе. В файле эксперт и индикатор.
www.opentraders.ru/downloads/512/
avatar

AM2

  • 12 декабря 2014, 16:45
+1
Вот в таком виде отработает советник сутки на демо и затем добавлю.
avatar

AM2

  • 11 декабря 2014, 21:04
+1
Внес в код некоторые изменения, установил советник на 2 пары. Код сейчас в таком виде:



//--- Inputs
extern int StopLoss     = 500; // стоп лосс ордера
extern int TakeProfit   = 500; // тейк профит ордера
extern int Slip         = 3;   // проскальзывание ордера
extern int Try          = 5;   // количество попыток выставить ордер
extern int CountCandle  = 6;   // количество свечек для расчета
extern int Delta        = 100; // расстояние AB
extern double Lots      = 1;   // объем позиции
//----
extern int period       = 92;  // период средней Slope Directional Line
extern int method       = 2;   // метод средней(SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int price        = 0;   // цена по которой строится средняя
//----
extern int MAGIC        = 333; // магик

int err;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(Digits==2 || Digits==4)
    {
     TakeProfit/=10;
     StopLoss/=10;     
     Slip/=10;
    }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    res,pos;
//--- get Moving Average 
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,1);
   double SlopeRed=iCustom(Symbol(),0,"Slope",period,method,price,1,1);
   double up=iHigh(Symbol(),0,iHighest(NULL,0,MODE_HIGH,CountCandle,1));
   double dn=iLow(Symbol(),0,iLowest(NULL,0,MODE_LOW,CountCandle,1));
   Comment("\nSlope Blue ",SlopeBlue,"\nSlope Red ",SlopeRed);   
      
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
       {
        if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         {
          if(OrderType()==OP_BUY) pos++;
          if(OrderType()==OP_SELL)pos++;
          if(OrderType()==OP_BUYSTOP) pos++;
          if(OrderType()==OP_SELLSTOP)pos++;          
         }
       }  
     } 
     
   //--- sell conditions
   if(SlopeBlue-High[1]<=50*Point && SlopeBlue==SlopeRed && Close[0]<SlopeBlue && pos<1 &&//вход на касании линии
      Close[0]-dn>=Delta*Point)
        {
         res=OrderSend(Symbol(),OP_SELLSTOP,Lots,dn,3,dn+StopLoss*Point,dn-TakeProfit*Point,"",MAGIC,0,Red);
         if(res<0)
          {
           Print("Ошибка: ",Error(GetLastError()));
           err++;
           Sleep(500);
           RefreshRates();
          }
         else
           Print("OK Order SELL STOP");
         return;
        }
      //--- buy conditions
   if(Low[1]-SlopeBlue<=50*Point && SlopeBlue!=SlopeRed && Close[0]>SlopeBlue && pos<1 &&//вход на касании линии
      up-Close[0]>=Delta*Point)
        {
         res=OrderSend(Symbol(),OP_BUYSTOP,Lots,up,3,up-StopLoss*Point,up+TakeProfit*Point,"",MAGIC,0,Blue);      
         if(res<0)
          {
           Print("Ошибка: ",Error(GetLastError()));
           err++;
           Sleep(500);
           RefreshRates();
          }
         else
           Print("OK Order BUY STOP");
         return;
        }
    if(err>Try) return;              
  }
//+------------------------------------------------------------------+
void ClosePos()
  {
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,1);   
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
       {
        if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         {
          if((OrderType()==OP_BUY || OrderType()==OP_BUYSTOP) && Close[1]<SlopeBlue)
           {
            DelOrder();
           }
          if((OrderType()==OP_SELL || OrderType()==OP_SELLSTOP) && Close[1]>SlopeBlue)
           {
            DelOrder();
           }
         }
       }  
     }             
  }  
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del; 
   for(int i=OrdersTotal()-1; i>=0; i--) 
    {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
       {
        if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         {    
          if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
          if (OrderType()==OP_BUYSTOP)  del=OrderDelete(OrderTicket()); 
          if (OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());
          if (OrderType()==OP_BUY)  del=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White);
          if (OrderType()==OP_SELL) del=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White);
          if(del==false)
           {
            Print("Ошибка: ",Error(GetLastError()));
            err++;
            Sleep(500);
            RefreshRates();
           }
          else
            Print("OK Delete Order ");                  
         }
       }                
     } 
   if(err>Try) return;        
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
  }
//+------------------------------------------------------------------+
string Error(int error_code)
  {
   string error_string;
//----
   switch(error_code)
     {
      //---- Коды ошибок, возвращаемые торговым сервером:
      case 0:   error_string="Нет ошибок";                                                     break;
      case 1:   error_string="Нет ошибки, но результат неизвестен";                            break;
      case 2:   error_string="Общая ошибка";                                                   break;
      case 3:   error_string="Неправильные параметры";                                         break;
      case 4:   error_string="Торговый сервер занят";                                          break;
      case 5:   error_string="Старая версия клиентского терминала";                            break;
      case 6:   error_string="Нет связи с торговым сервером";                                  break;
      case 7:   error_string="Недостаточно прав";                                              break;
      case 8:   error_string="Слишком частые запросы";                                         break;
      case 9:   error_string="Недопустимая операция нарушающая функционирование сервера";      break;
      case 64:  error_string="Счет заблокирован";                                              break;
      case 65:  error_string="Неправильный номер счета";                                       break;
      case 128: error_string="Истек срок ожидания совершения сделки";                          break;
      case 129: error_string="Неправильная цена";                                              break;
      case 130: error_string="Неправильные стопы";                                             break;
      case 131: error_string="Неправильный объем";                                             break;
      case 132: error_string="Рынок закрыт";                                                   break;
      case 133: error_string="Торговля запрещена";                                             break;  
      case 134: error_string="Недостаточно денег для совершения операции";                     break;
      case 135: error_string="Цена изменилась";                                                break;
      case 136: error_string="Нет цен";                                                        break;
      case 137: error_string="Брокер занят";                                                   break;
      case 138: error_string="Новые цены";                                                     break;
      case 139: error_string="Ордер заблокирован и уже обрабатывается";                        break;
      case 140: error_string="Разрешена только покупка";                                       break;
      case 141: error_string="Слишком много запросов";                                         break;
      case 145: error_string="Модификация запрещена, так как ордер слишком близок к рынку";    break;
      case 146: error_string="Подсистема торговли занята";                                     break;
      case 147: error_string="Использование даты истечения ордера запрещено брокером";         break;
      case 148: error_string="Количество открытых и отложенных ордеров достигло предела, установленного брокером.";break;
      default:  error_string="Неизвестная ошибка.";
     }
//----
   return(error_string);
 }  
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  { 
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
   if(NewBar()==true)
    {   
     OpenPos();
     ClosePos();
    }
//---
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 11 декабря 2014, 20:01
0
Советник перестает открывать ордера. когда выставлены все лоты в последовательности, а вся серия еще не закрыта:

LotBuyLimit=«0.01;0.02;0.04;0.08;0.16;0.32;0.64;1.28;2.56;5.12;»;


avatar

AM2

  • 11 декабря 2014, 18:15
0
Ставили на демо? Как работает?
avatar

AM2

  • 11 декабря 2014, 17:48
0
Смотрел на этот индикатор, смотрел… Так как внутрь залезть нельзя, на мой взгляд логика такая: закрываются несколько свечей ниже или выше машки, меняется цвет. Если все верно, то можно добавлять и стрелки и квадратики и сигнал звуковой.
avatar

AM2

  • 9 декабря 2014, 21:31
0
В соседнем топике подобный индикатор плюс советник. Отличие только в том что вместо стрелок, индикатор ставит метки «UP» или «DOWN». Советник и индикатор можно скачать здесь: www.opentraders.ru/downloads/526/

avatar

AM2

  • 9 декабря 2014, 20:03
+1
Скачал, посмотрел файлы. Все скомпилировано, формат *.ex4 Для правки нужны исходники, файлы *.mq4
avatar

AM2

  • 9 декабря 2014, 19:55
0
Все правильно. Входит по сигналу, затем усредняется. Условие входа элементарное: цена выше или ниже МА.
avatar

AM2

  • 9 декабря 2014, 18:35