0
extern int    Indicator   = 1;   //0-выкл. 1-вкл.
avatar

AM2

  • 2 марта 2016, 11:43
0
Вроде бы все, надеюсь это не составит у Вас большого труда.


Это не так просто как кажется. я вот уже часа 2 сижу и не знаю как получить цены этих уровней. У крайних получил цену, а на промежуточные не знаю.


   string name;
   for(int i=ObjectsTotal()-1;  i>=0;  i--)
     {
      name=ObjectName(i);
     }
     
   Comment("\n 0:  ",ObjectGetDouble(0,name,OBJPROP_PRICE2),
           "\n 23.6:  ",ObjectGetDouble(0,name,OBJPROP_PRICE,1),
           "\n 38.2:  ",ObjectGetDouble(0,name,OBJPROP_PRICE,2),
           "\n 50:  ",ObjectGetDouble(0,name,OBJPROP_PRICE,3),
           "\n 61.8:  ",ObjectGetDouble(0,name,OBJPROP_PRICE,4),
           "\n 100:  ",ObjectGetDouble(0,name,OBJPROP_PRICE1));

avatar

AM2

  • 2 марта 2016, 11:18
0
Магик уж всегда есть.
avatar

AM2

  • 2 марта 2016, 09:45
+1
Это лучше будет сделать в виде советника. Посмотрю сегодня.
avatar

AM2

  • 2 марта 2016, 09:05
+1
Это нестандартный советник. Я все описал в тех.задании. Если Вы не хотите им заниматься напишите и я сам добьюсь реализации своих мыслей. Я просто думал что с Вашей помощью это будет гораздо быстрее. Ведь я безработный и до пенсии еще 1 год. А надо на что-то жить.


Всего то надо было объединить 2 советника в 1. Кто хочет, тот работает.
Кто не хочет, тот ищет причины в виде Т.З., либо заявляет, что проще написать с нуля. То что проще, не всегда лучше


При таком отношении мало кто захочет.
avatar

AM2

  • 2 марта 2016, 00:42
0
Утром займусь.
avatar

AM2

  • 2 марта 2016, 00:35
0
По ТЗ все есть: www.opentraders.ru/downloads/1083/




//+------------------------------------------------------------------+
//|                                                    StopLimit.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots      = 0.1; // объем позиции
extern int StopLoss     = 500; // стоп лосс ордера
extern int TakeProfit   = 500; // тейк профит ордера
extern int Expiration   = 10;  // время истечения ордера
extern int StartHour    = 0;   // час начала торговли
extern int StartMin     = 30;  // минута начала торговли
extern int EndHour      = 23;  // час окончания торговли
extern int EndMin       = 30;  // минута окончания торговли
extern int Slip         = 30;  // реквот
extern int Type         = 0;   // 0-Stop. 1-Limit
extern int Hours        = 8;   // через сколько часов удаляем ордера
extern int Delta        = 100; // расстояние от цены
extern int Magic        = 333; // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int    r=0;
   color clr=clrNONE;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)   sl=NormalizeDouble(price+StopLoss*Point,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(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*3600,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime OpenTime()
  {
   datetime t=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) t=OrderOpenTime();
           }
        }
     }
   return(t);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   bool cl,del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY) cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
            if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
   return;
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(isTradeTimeInt(StartHour,StartMin,EndHour,EndMin) && CountTrades()<1)
     {
      if(Type==0)
        {
         if(CountOrders(4)<1) PutOrder(4,Bid+Delta*Point);
         if(CountOrders(5)<1) PutOrder(5,Bid-Delta*Point);
        }

      if(Type==1)
        {
         if(CountOrders(2)<1) PutOrder(2,Bid-Delta*Point);
         if(CountOrders(3)<1) PutOrder(3,Bid+Delta*Point);
        }
     }

   if(CountTrades()>0 && TimeCurrent()-OpenTime()>Expiration*3600)
     {
      CloseAll();
     }

   Comment("\n OpenTime: ",OpenTime(),
           "\n TimeCurrent: ",TimeCurrent(),
           "\n TimeCurrent()-OpenTime(): ",(int)(TimeCurrent()-OpenTime()));
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 2 марта 2016, 00:31
0
Завтра с утра уже посмотрю.
avatar

AM2

  • 1 марта 2016, 22:20
0
приведите пару ссылок, я переделаю просто
avatar

AM2

  • 1 марта 2016, 21:50
0
Посмотрите в базе, там были подобные.
avatar

AM2

  • 1 марта 2016, 21:45
0
Можно вопрос по данному сову? При добавлении пары в настройках в последствии на этой паре нет ни тп, ни сл.Это нормально?


Нормально. Кроет по профиту в валюте, а последняя версия и по стопам. У вас видимо не последняя версия.
avatar

AM2

  • 1 марта 2016, 21:42
0
Обновил в базе, прогнал в тестере. Первый вариант есть также в виде кода выше.
www.opentraders.ru/downloads/1026/

avatar

AM2

  • 1 марта 2016, 21:40
0
Я все описал в тех.задании.


Вот то что я понял из вашего задания. Я не зря привел образец: am2.opentraders.ru/29048.html
Когда мне что то непонятно я прошу составить ТЗ в таком виде. Чего не было сделано.

Техническое задание

Торговый советник на резких движениях цены для торгового терминала МТ4

В советнике не используются индикаторы:

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

• В советнике должен быть реализован StopLoss,
В советнике должен быть реализован Takeprofit
В советнике должен быть реализован скользящий стоп /0=falce/

• Установка фиксированного лота для торговли,FALCE/
• Выбор таймфрейма в зависимости от выбранного окна графика,
Magic

1. Тейкпрофит и стоплосс
1. 0 — параметр отключен, и Тейкпрофит сделки будет равен 0.
2. 0 — параметр отключен, и Стоплосс сделки будет равен 0.

2. Условия входа и выхода

2.1. Вход в длинную позицию осуществляется по следующему условию:

2.1.1. Сработал ордер бай стоп.
2.1.2. Цена прошла некоторое количество пунктов от предыдущей позиции и маржа достигла указанного уровня.

Выход из длинной позиции вручную.

2.2. Вход в короткую позицию осуществляется по следующему условию:

2.1.1. Сработал ордер селл стоп.
2.1.2. Цена прошла некоторое количество пунктов от предыдущей позиции и маржа достигла указанного уровня.

Выход из короткой позиции вручную.

3. Выставление заявок

Первые ордера стоповые, далее по рынку.
avatar

AM2

  • 1 марта 2016, 19:36
0
Придется писать самому, мне непонятно ваше ТЗ. Чуть позже набросаю.
avatar

AM2

  • 1 марта 2016, 19:02
0
Все уточнения в топике. Опишите подробно входы выходы и сопровождение ордеров.
avatar

AM2

  • 1 марта 2016, 17:51
0
Сегодня буду смотреть.
avatar

AM2

  • 1 марта 2016, 17:46
0
Здесь несколько линий не добавишь, т.к. ограничено число индикаторных буферов. Даже еще на одну линию не хватит.
avatar

AM2

  • 1 марта 2016, 17:43
0
Я жду скрины где глюки видно?
avatar

AM2

  • 1 марта 2016, 17:33