Kashtan
Игорь

 
Уровень 19

  Торгую в компаниях:


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

Рейтинг 2146



РЕКОМЕНДУЮ



Следящий советник

Прошу Андрея создать советник, который корректирует объём открытой сделки исходя из текущего баланса.

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

В настройках советника должно присутствовать десять одинаковых полей, в каждом из которых можно указать размер депо и лот, которым будет открыта(открыты) новые сделки при достижении этого депо. Что это значит: Допустим в строке настроек №1 прописан депозит 1000$ и объём 0.1. Это значит что если при балансе равном или выше 1000$ я при открытии нового ордера укажу объём 0.01 или 1.00 или ещё какой то лот, то эта сделка всё равно должна открыться лотом 0.1. Спасибо
  • 0
  • Просмотров: 5216
  • 21 февраля 2016, 13:04
  • Kashtan
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

Брокер для ваших роботов, 15 лет на рынке

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

+
0
Укажите конкретно что должно быть в этих 10 полях? Опишите все максимально подробно, сейчас ТЗ очень расплывчатое.
avatar

  35  AM2 Сообщений: 16252 - Андрей

  • 21 февраля 2016, 13:10
+
0
Поле №1 Баланс/Объём
Поле №2 Баланс/Объём
Поле №3 Баланс/Объём
Поле №4 Баланс/Объём
Поле №5 Баланс/Объём
Поле №6 Баланс/Объём
Поле №7 Баланс/Объём
Поле №8 Баланс/Объём
Поле №9 Баланс/Объём
Поле №10 Баланс/Объём

Справа от слов «Баланс» и «Объём» находятся поля для ввода соответствующих числовых значений. Если в Поле №1 Баланс 1000/Объём 0.1, в Поле №2 Баланс 2000/Объём 0.2, в Поле №3 Баланс 3000/Объём 0.3 и т.д. из этого следует что до тех пор пока баланс больше 1000 но меньше 2000 новый ордер открывается лотом 0.1, независимо от того какой лот прописать при открытии этого ордера. Подразумевается что в терминале не будет открываться больше одного ордера одновременно:) 
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 21 февраля 2016, 13:27
+
0
Или можно иначе: В каждой из десяти настроек будет два поля для ввода значений баланса(минимального и максимального), и поле для размера лота — которым будет открываться ордер, пока баланс находится в пределах этих двух значений…
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 21 февраля 2016, 13:36
+
0
Здесь я делал точно такой же советник: zakaz.opentraders.ru/30200.html
avatar

  35  AM2 Сообщений: 16252 - Андрей

  • 21 февраля 2016, 13:43
+
0
Спасибочки, щас глянем!
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 21 февраля 2016, 13:45
+
0
Там к сожалению не совсем то Андрей. Эти цифры (1000 равно 0.1, 2000 равно 0.2 и т.д) я написал просто для примера. На самом деле от одной ступени к следующей не всегда предполагается повышение объёма и в первой строке может стоять депозит 100 и объём 0.2, а во второй к примеру депозит 300 и объём 0.25. Самих ступеней так вообще в разы больше, просто чтоб не перегружать меню настроек я ограничился десятью.
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 21 февраля 2016, 14:00
+
0
Новый лот не должен разсчитываться автоматически по эквити или чему-то ещё, а именно по заданным в ручную значениям
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 21 февраля 2016, 14:04
+
0
Сейчас набросаю с полями.
avatar

  35  AM2 Сообщений: 16252 - Андрей

  • 21 февраля 2016, 14:06
+
0
Если сложно сделать, чтоб советник менял лот у самих открываемых ордеров, можно и по другому. Например каждый ордер всегда будет открываться минимальным объёмом 0.01, и сразу же советник в дополнение к открытому ордеру будет открывать точно такой, но обьёмом исходя из настроек
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 21 февраля 2016, 14:08
+
0
Не торопитесь пожалуйста! До завтра далеко, всё равно рынок не работает:) 
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 21 февраля 2016, 14:10
+
0
Вообще конечно желательно чтоб без второго ордера)
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 21 февраля 2016, 14:17
+
0
Сделал с полями:


//+------------------------------------------------------------------+
//|                                                       LotExp.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.01;     // минимальный лот
extern double Depo1     = 1000;     // депо
extern double Lot1      = 0.1;      // лот
extern double Depo2     = 2000;     // депо
extern double Lot2      = 0.2;      // лот
extern double Depo3     = 3000;     // депо
extern double Lot3      = 0.3;      // лот
extern double Depo4     = 4000;     // депо
extern double Lot4      = 0.4;      // лот
extern double Depo5     = 5000;     // депо
extern double Lot5      = 0.5;      // лот
extern double Depo6     = 6000;     // депо
extern double Lot6      = 0.6;      // лот
extern double Depo7     = 7000;     // депо
extern double Lot7      = 0.7;      // лот
extern double Depo8     = 8000;     // депо
extern double Lot8      = 0.8;      // лот
extern double Depo9     = 9000;     // депо
extern double Lot9      = 0.9;      // лот
extern double Depo10    = 10000;    // депо
extern double Lot10     = 1;        // лот


extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 500;      // язь
extern int Slip         = 30;       // реквот
extern int BuySell      = 1;        // 1-buy 2-sell 0-off
extern int Magic        = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   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,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   if(AccountBalance()<Depo1) lot=Lots;
   if(AccountBalance()>=Depo1 && AccountBalance()<Depo2) lot=Lot1;
   if(AccountBalance()>=Depo2 && AccountBalance()<Depo3) lot=Lot2;
   if(AccountBalance()>=Depo3 && AccountBalance()<Depo4) lot=Lot3;
   if(AccountBalance()>=Depo4 && AccountBalance()<Depo5) lot=Lot4;
   if(AccountBalance()>=Depo5 && AccountBalance()<Depo6) lot=Lot5;
   if(AccountBalance()>=Depo6 && AccountBalance()<Depo7) lot=Lot6;
   if(AccountBalance()>=Depo7 && AccountBalance()<Depo8) lot=Lot7;
   if(AccountBalance()>=Depo8 && AccountBalance()<Depo9) lot=Lot8;
   if(AccountBalance()>=Depo9 && AccountBalance()<Depo10) lot=Lot9;
   if(AccountBalance()>=Depo10) lot=Lot10;
   
   return(lot);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1)
     {
      if(BuySell==1) PutOrder(0,Ask);
      if(BuySell==2) PutOrder(1,Bid);
     }

   Comment("\n Balance: ",DoubleToString(AccountBalance(),2),
           "\n Lots: ",Lot());
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16252 - Андрей

  • 21 февраля 2016, 14:21
+
0
Отлично! Так понял, советник будет открывать ордер в дополнение к открытому?
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 21 февраля 2016, 14:37
+
0
Так то конечно было бы хорошо чтоб он у самого ордера лот менял))))))
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 21 февраля 2016, 14:40
+
0
Я совсем упустил из виду то, что если советник будет открывать второй ордер, этот ордер должен быть закрыт при закрытии того первого с минимальным лотом. Потому что ордера будут открываться не в ручную а по сигналу советника копировщика. В терминале по мимо этого советника ещё будет стоять клиент копировщика сигналов и свои лось и язь ему не нужны…
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 21 февраля 2016, 15:00
+
0
Отлично! Так понял, советник будет открывать ордер в дополнение к открытому?


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

В терминале по мимо этого советника ещё будет стоять клиент копировщика сигналов и свои лось и язь ему не нужны…


Ставьте стопы в 0 и их не будет.
avatar

  35  AM2 Сообщений: 16252 - Андрей

  • 21 февраля 2016, 15:23
+
0
Андрей при открытии позиции минимальным лотом советник открывает вторую лотом исходя из настроек. Но после ручного закрытия первой позиции — вторая открытая советником остаётся висеть. А нужно чтоб она так же закрывалась(
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 22 февраля 2016, 00:01
+
0
Более того! При самостоятельном закрытии этой второй позиции она заново открывается!!!
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 22 февраля 2016, 00:06
+
0
При установке настройки «BuySell» на ноль ордер не копируется, а при установке 1 или 2 позиция открывается сама! То есть я даже минимальным лотом ничего не открыл, а сделка сама открылась. Эта настройка вообще не нужна… Всё просто — открылась позиция на покупку с минимальным лотом, добавилась такая же лотом исходя из настроек. Закрылась первая позиция, в след за ней закрылась и та которую советник открыл. С продажами то же самое
Редактирован: 22 февраля 2016, 00:16
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 22 февраля 2016, 00:11
+
0
Возможно Андрей я что то упустил в тех задании, поэтому на всякий случай ещё раз по пунктам подробнее.
Во первых забыл уточнить, что советник желателен для МТ5! Если не сложно, переделайте пожалуйста.
Во вторых советник устанавливается на график любой валютной пары, и если была открыта покупка по фунту, советник отрывает так же покупку по фунту не зависимо от того на график какого инструмента он прицеплен. Когда первая позиция закрылась в ручную или по тейку/стопу — советник так же закрывает то что он открыл. Аналогично с продажами!
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 22 февраля 2016, 00:27
+
0
Нет так дело не пойдет. ТЗ все время меняется, изменилась даже платформа. На этом все.
avatar

  35  AM2 Сообщений: 16252 - Андрей

  • 22 февраля 2016, 00:30
+
0
На счёт платформы да, я загнул( Но в начальном ТЗ я просил чтоб советник не открывал дополнительных позиций, а менял минимальный лот у этих позиций на другой. И если Вам Андрей стало проще сделать чтоб советник вместо замены лота открывал дополнительные позы, из этого само собой подразумевалось что эти позы должны открываться по тем же инструментам и одновременно с первыми закрываться. Вы по каким то причинам этого не учли и не переспросили чтоб уточнить, сделали так что дополнительные позы живут своей отдельной жизнью, а я виноват теперь((
Редактирован: 22 февраля 2016, 08:32
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 22 февраля 2016, 08:28
+
+1
в начальном ТЗ я просил чтоб советник не открывал дополнительных позиций, а менял минимальный лот у этих позиций на другой. И если Вам Андрей стало проще сделать чтоб советник вместо замены лота открывал дополнительные позы
Вы вручную сделайте покупку или продажу. А потом уже у открытой позиции попробуйте поменять лот. Неужели не получилось? Ну тогда зачем просите от Андрея невозможного?
avatar

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

  • 22 февраля 2016, 14:59
+
0
Ой, только сейчас это прочитал:) 
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 22 февраля 2016, 17:49
+
+1
И если Вам Андрей стало проще сделать чтоб советник вместо замены лота открывал дополнительные позы

Ну какая замена лота? Нельзя в МТ4 поменять у уже открытой сделки объем. Можно в МТ5 путем как раз таки открытия новых ордеров, потому что они будут присоединяться к старой позиции, и при этом будет изменяться цена открытия этой позиции.

Чтобы добиться одной позиции в МТ4, придется закрывать существующую позицию и переоткрывать новую с новым объемом суммарным. Но это будет потеря спреда на каждом шаге.

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

  45  Bishop Сообщений: 5802 - АЛЬФАХАМЕЦ-Машковод

  • 22 февраля 2016, 16:23
+
+4
Как то один раз уже было такое и тоже на праздники *drinks* 
После этого я написал образец ТЗ: am2.opentraders.ru/29048.html
В предложенном образце все четко, без всяких неясностей и разночтений.
Какое ТЗ такой и результат.

Мое видение этого задания:

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

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

1. Суть работы советника:

Ордер выставленный копировщиком, удаляется и вместо него выставляется рыночный ордер того же направления с объемом рассчитанным согласно значениям в настройках:

//--- Inputs
extern double Lots      = 0.01;     // минимальный лот
extern double Depo1     = 1000;     // депо
extern double Lot1      = 0.1;      // лот
extern double Depo2     = 2000;     // депо
extern double Lot2      = 0.2;      // лот
extern double Depo3     = 3000;     // депо
extern double Lot3      = 0.3;      // лот
extern double Depo4     = 4000;     // депо
extern double Lot4      = 0.4;      // лот
extern double Depo5     = 5000;     // депо
extern double Lot5      = 0.5;      // лот
extern double Depo6     = 6000;     // депо
extern double Lot6      = 0.6;      // лот
extern double Depo7     = 7000;     // депо
extern double Lot7      = 0.7;      // лот
extern double Depo8     = 8000;     // депо
extern double Lot8      = 0.8;      // лот
extern double Depo9     = 9000;     // депо
extern double Lot9      = 0.9;      // лот
extern double Depo10    = 10000;    // депо
extern double Lot10     = 1;        // лот




• Советник торгует в реверс (LONG/SHORT)
• В советнике должен быть реализован StopLoss,
• В советнике должен быть реализован Takeprofit
• Установка динамического лота для торговли,
• Выбор таймфрейма в зависимости от выбранного окна графика,
• Magic

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

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

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

Выставлен ордер от копировщика на покупку. Ордер удаляется советником и ставится того же направления с объемом рассчитанным согласно значениям в настройках.

Выход из длинной позиции

Копировщиком выставлен ордер обратного направления, т.е. на продажу.

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

Выставлен ордер от копировщика на продажу. Ордер удаляется советником и ставится того же направления с объемом рассчитанным согласно значениям в настройках.

Выход из короткой позиции

Копировщиком выставлен ордер обратного направления, т.е. на покупку.

2. Выставление заявок
Все ордера, формируемые советником, являются рыночными
avatar

  35  AM2 Сообщений: 16252 - Андрей

  • 22 февраля 2016, 16:05
+
+2
Дожили, тех задание за заказчика пишет программист. Не оценят.
avatar

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

  • 22 февраля 2016, 17:18
+
0
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 22 февраля 2016, 17:57
+
0
Не слушайте Оксану! Я оценил и благодарен:) 
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 22 февраля 2016, 17:58
+
0
Всем привет! Только сейчас прочитал что вы тут понаписали) Да, наверно я плохой объясняльщик))) В другой раз придётся максимально подробно расписывать, вплоть до того как запускать терминал)) То что в моей голове кажется простым и понятным и не требующим объяснений, опытному программисту может совсем так не казаться так как у него кроме моего заказа и другие есть и каждый со своими заморочками, он не может знать на сто процентов кто что имел ввиду)
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 22 февраля 2016, 17:52
+
0
Я сымитировал работу копировщика в тестере. После появления ордера от копировщика, советник добавляет ордер с рассчитанным лотом, при обратном сигнале закрываем предыдущие позы и добавляем новую. Только ошибку закрытия долго не могу выловить.




//+------------------------------------------------------------------+
//|                                                       LotExp.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.01;     // лот копировщика
extern double Depo1     = 1000;     // депо
extern double Lot1      = 0.1;      // лот
extern double Depo2     = 2000;     // депо
extern double Lot2      = 0.2;      // лот
extern double Depo3     = 3000;     // депо
extern double Lot3      = 0.3;      // лот
extern double Depo4     = 4000;     // депо
extern double Lot4      = 0.4;      // лот
extern double Depo5     = 5000;     // депо
extern double Lot5      = 0.5;      // лот
extern double Depo6     = 6000;     // депо
extern double Lot6      = 0.6;      // лот
extern double Depo7     = 7000;     // депо
extern double Lot7      = 0.7;      // лот
extern double Depo8     = 8000;     // депо
extern double Lot8      = 0.8;      // лот
extern double Depo9     = 9000;     // депо
extern double Lot9      = 0.9;      // лот
extern double Depo10    = 10000;    // депо
extern double Lot10     = 1;        // лот


extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 500;      // язь
extern int Slip         = 30;       // реквот
extern int Magic        = 123;      // магик советника
extern int CMagic       = 111;      // магик копировщика

int b=0,s=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades(int type,int magic)
  {
   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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price,double lot,int magic)
  {
   int r=0;
   color clr=Green;
   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,lot,NormalizeDouble(price,Digits),Slip,sl,tp,"",magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int type)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic || OrderMagicNumber()==CMagic))
           {
            if(OrderType()==type) cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
            if(OrderType()==type) cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
           }
        }
     }
   //return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   if(AccountBalance()<Depo1) lot=Lots;
   if(AccountBalance()>=Depo1 && AccountBalance()<Depo2) lot=Lot1;
   if(AccountBalance()>=Depo2 && AccountBalance()<Depo3) lot=Lot2;
   if(AccountBalance()>=Depo3 && AccountBalance()<Depo4) lot=Lot3;
   if(AccountBalance()>=Depo4 && AccountBalance()<Depo5) lot=Lot4;
   if(AccountBalance()>=Depo5 && AccountBalance()<Depo6) lot=Lot5;
   if(AccountBalance()>=Depo6 && AccountBalance()<Depo7) lot=Lot6;
   if(AccountBalance()>=Depo7 && AccountBalance()<Depo8) lot=Lot7;
   if(AccountBalance()>=Depo8 && AccountBalance()<Depo9) lot=Lot8;
   if(AccountBalance()>=Depo9 && AccountBalance()<Depo10) lot=Lot9;
   if(AccountBalance()>=Depo10) lot=Lot10;

   return(lot);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double rsi=iRSI(NULL,0,14,0,1);
// имитация работы копировщика
   if(IsTesting())
     {
      if(rsi<30 && CountTrades(0,CMagic)<1) PutOrder(0,Ask,Lots,CMagic);
      if(rsi>70 && CountTrades(1,CMagic)<1) PutOrder(1,Bid,Lots,CMagic);
     }

// ставим ордера того же направления с перерасчитанным лотом
   if(CountTrades(0,CMagic)>0 && CountTrades(0,Magic)<1)
     {
      CloseAll(1); //Появился сигнал бай кроем селлы
      PutOrder(0,Ask,Lot(),Magic);
     }

   if(CountTrades(1,CMagic)>0 && CountTrades(1,Magic)<1) 
     {
      CloseAll(0); //Появился сигнал селл кроем баи
      PutOrder(1,Bid,Lot(),Magic);
     }

   Comment("\n Balance: ",DoubleToString(AccountBalance(),2),
           "\n Lots: ",Lot());
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16252 - Андрей

  • 23 февраля 2016, 11:25
+
+1
Ошибку закрытия выловил проверкой ордера по цене закрытия.
www.opentraders.ru/downloads/1068/


avatar

  35  AM2 Сообщений: 16252 - Андрей

  • 23 февраля 2016, 11:52
+
0
Спасибо, не ждал что напишите потому что пока не научусь зарабатывать пункты о чём писал в приват воспользоваться этой идеей не смогу. Так сказать будет прозапас)
Редактирован: 23 февраля 2016, 13:05
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 23 февраля 2016, 12:59

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