oyama
Александр

 
Уровень 17

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


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

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от oyama



Путь самурая Комментариев 2
2015-10-10 12:41:01Рейтинг 0

Просто совпадения ? Комментариев 11
2016-10-31 18:38:17Рейтинг 0

Неделя Комментариев 4
2015-08-28 11:12:33Рейтинг 0

Три сына. Комментариев 1
2015-09-11 11:43:15Рейтинг 0

Кросс на кроссе. Комментариев 2
2015-10-30 09:08:13Рейтинг 0

Для частичного закрытия .

Андрей! Очень нужен советник для частичного закрытия позиции на определённом уровне. Прикладываю сову, она к сожалению без исходника, но там всё реализовано так как надо, только вот закрытие задаётся процентами от первоначального лота, а это не совсем удобно. Нужно что бы задавалось сколько надо закрыть цифрой лота.

all_in1.ex4 (8 Kb)
  • 0
  • Просмотров: 7214
  • 17 сентября 2015, 12:26
  • oyama
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Опишите подробнее ТЗ.
avatar

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

  • 17 сентября 2015, 12:29
+
0
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 17 сентября 2015, 12:40
+
0
уровни естественно в пунктах
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 17 сентября 2015, 12:40
+
0
Вы описали настройки. Мне нужен принцип работы советника, т.к. я буду писать с нуля.
avatar

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

  • 17 сентября 2015, 12:54
+
0
например я открыл сделку одним лотом 1.0 в настройках я указываю через какое количество пунктов какая часть закрывается от открытой сделкb
Например:
Levels 50/70/20/
Lot 0.2/0.5/0.3
таким образом через 50 пунктов закроется 0.2 лота, на 70-и пунктах закроется 0.5, а когда вернётся к двадцати пунктам закроет оставшиеся 0.3 Колен закрытия должно быть больше трёх.
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 17 сентября 2015, 14:24
+
0
Сейчас в советнике 4 лота и 4 тейка: www.opentraders.ru/downloads/872/




//+------------------------------------------------------------------+
//|                                                     CloseLot.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

#include <stdlib.mqh>

//--- Inputs
extern int StopLoss     = 500;
extern int TakeProfit   = 500;
extern int TakeProfit1  = 100;
extern int TakeProfit2  = 200;
extern int TakeProfit3  = 300;
extern int OpenOrder=2;    //0-off. 1-buy. 2-sell.
extern int Slip         = 30;
extern double Lot       = 1;
extern double Lot1      = 0.1;
extern double Lot2      = 0.2;
extern double Lot3      = 0.4;
extern int    Magic     = 111;

bool CloseOrd1,CloseOrd2,CloseOrd3;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int res=0,err=0;
   double sl;

//--- sell 
   if(OpenOrder==2)
     {
      double bid=MarketInfo(NULL,MODE_BID);
      if(StopLoss==0) sl=0; else sl=bid+StopLoss*Point;
      res=OrderSend(Symbol(),OP_SELL,Lot,bid,Slip,sl,bid-TakeProfit*Point,"",Magic,0,Red);
      if(res<0)
        {
         err=GetLastError();
         Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА SELL: ",err,"(",ErrorDescription(err),")");
           } else {
         RefreshRates();
        }
     }

//--- buy 
   if(OpenOrder==1)
     {
      double ask=MarketInfo(NULL,MODE_ASK);
      if(StopLoss==0) sl=0; else sl=ask-StopLoss*Point;
      res=OrderSend(Symbol(),OP_BUY,Lot,ask,Slip,sl,ask+TakeProfit*Point,"",Magic,0,Blue);
      if(res<0)
        {
         err=GetLastError();
         Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА BUY: ",err,"(",ErrorDescription(err),")");
           } else {
         RefreshRates();
        }
     }
//---
  }
//+------------------------------------------------------------------+  
void CloseOrders()
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderMagicNumber()==Magic)
              {
               if(OrderType()==OP_BUY)
                 {
                  if(Bid-OrderOpenPrice()>TakeProfit1*Point)
                    {
                     if(CloseOrd1) cl=OrderClose(OrderTicket(),Lot1,Bid,Slip,Blue);
                     CloseOrd1=false;
                    }

                  if(Bid-OrderOpenPrice()>TakeProfit2*Point)
                    {
                     if(CloseOrd2) cl=OrderClose(OrderTicket(),Lot2,Bid,Slip,Blue);
                     CloseOrd2=false;
                    }

                  if(Bid-OrderOpenPrice()>TakeProfit3*Point)
                    {
                     if(CloseOrd3) cl=OrderClose(OrderTicket(),Lot3,Bid,Slip,Blue);
                     CloseOrd3=false;
                    }
                 }

               if(OrderType()==OP_SELL)
                 {
                  if(OrderOpenPrice()-Ask>TakeProfit1*Point)
                    {
                     if(CloseOrd1) cl=OrderClose(OrderTicket(),Lot1,Ask,Slip,Red);
                     CloseOrd1=false;
                    }

                  if(OrderOpenPrice()-Ask>TakeProfit2*Point)
                    {
                     if(CloseOrd2) cl=OrderClose(OrderTicket(),Lot2,Ask,Slip,Red);
                     CloseOrd2=false;
                    }

                  if(OrderOpenPrice()-Ask>TakeProfit3*Point)
                    {
                     if(CloseOrd3) cl=OrderClose(OrderTicket(),Lot3,Ask,Slip,Red);
                     CloseOrd3=false;
                    }
                 }
              }
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int p=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) p++;
           }
        }
     }

   if(p<1) 
     {
      CloseOrd1=true;
      CloseOrd2=true;
      CloseOrd3=true;
      OpenPos();
     }
   if(p>0) CloseOrders();

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


Редактирован: 18 сентября 2015, 13:29
avatar

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

  • 17 сентября 2015, 15:57
+
0
extern int OpenOrder=2; //0-off. 1-buy. 2-sell.
0- для всех ордеров
1 для бай
2 для селл?
закрывать же будет например если задать 0.23 лота или 0.03?
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 17 сентября 2015, 16:19
+
0
OpenOrder — это для тестера, открывать сделки или нет и какие. Если нужно открывать советником пожалуйста. Магик можно поставить 0 и тогда подхватит любые ордера.
avatar

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

  • 17 сентября 2015, 16:41
+
0
это гуд
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 17 сентября 2015, 16:48
+
0
Магик, наверное ни к чему, т.к. сов должен подхватывать открытую на графике сделку, на каждый график свой сов… стоп лосс тоже не нужен, т.к. ставится всё руками…
Редактирован: 17 сентября 2015, 16:29
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 17 сентября 2015, 16:27
+
0
Стоп выставляете 0 и не будет у вас стоплосса.
avatar

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

  • 17 сентября 2015, 16:50
+
0
Может я чего не так делаю, но у меня не закрывает ничего
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 18 сентября 2015, 13:53
+
0
Сейчас поставлю на демо для отладки и буду смотреть.
avatar

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

  • 18 сентября 2015, 13:55
+
0
Может я чего не так делаю, но у меня не закрывает ничего


Открыл советником ордер, закрывает как положено. Магик выставили в 0?

avatar

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

  • 18 сентября 2015, 14:16
+
0
да открывал руками, закрывает как, сначала ТП1 потом ТП 2 и тд? Скрин настроек можно посмотреть? Магик 0
Редактирован: 18 сентября 2015, 15:07
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 18 сентября 2015, 15:07
+
0
Также открыл руками, настройки, жду. Советник позу видит. Закрывает тейки по порядку, сначала:

extern int TakeProfit1  = 100;
extern int TakeProfit2  = 200;
extern int TakeProfit3  = 300;


а потом уже:

extern int TakeProfit   = 500;



Редактирован: 18 сентября 2015, 15:52
avatar

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

  • 18 сентября 2015, 15:46
+
0
Немного поправил, гоняю дальше.


//+------------------------------------------------------------------+
//|                                                     CloseLot.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

#include <stdlib.mqh>

//--- Inputs
extern int StopLoss     = 500;
extern int TakeProfit   = 500;
extern int TakeProfit1  = 100;
extern int TakeProfit2  = 200;
extern int TakeProfit3  = 300;
extern int OpenOrder=2;    //0-off. 1-buy. 2-sell.
extern int Slip         = 30;
extern double Lot       = 1;
extern double Lot1      = 0.1;
extern double Lot2      = 0.2;
extern double Lot3      = 0.4;
extern int    Magic     = 0;

bool CloseOrd1=true,CloseOrd2=true,CloseOrd3=true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int res=0,err=0;
   double sl;

//--- sell 
   if(OpenOrder==2)
     {
      double bid=MarketInfo(NULL,MODE_BID);
      if(StopLoss==0) sl=0; else sl=bid+StopLoss*Point;
      res=OrderSend(Symbol(),OP_SELL,Lot,bid,Slip,sl,bid-TakeProfit*Point,"",Magic,0,Red);
      if(res<0)
        {
         err=GetLastError();
         Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА SELL: ",err,"(",ErrorDescription(err),")");
           } else {
         RefreshRates();
        }
     }

//--- buy 
   if(OpenOrder==1)
     {
      double ask=MarketInfo(NULL,MODE_ASK);
      if(StopLoss==0) sl=0; else sl=ask-StopLoss*Point;
      res=OrderSend(Symbol(),OP_BUY,Lot,ask,Slip,sl,ask+TakeProfit*Point,"",Magic,0,Blue);
      if(res<0)
        {
         err=GetLastError();
         Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА BUY: ",err,"(",ErrorDescription(err),")");
           } else {
         RefreshRates();
        }
     }
//---
  }
//+------------------------------------------------------------------+  
void CloseOrders()
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderMagicNumber()==Magic)
              {
               if(OrderType()==OP_BUY)
                 {
                  if(Bid-OrderOpenPrice()>TakeProfit1*Point)
                    {
                     if(CloseOrd1) cl=OrderClose(OrderTicket(),Lot1,Bid,Slip,Blue);
                     CloseOrd1=false;
                    }

                  if(Bid-OrderOpenPrice()>TakeProfit2*Point)
                    {
                     if(CloseOrd2) cl=OrderClose(OrderTicket(),Lot2,Bid,Slip,Blue);
                     CloseOrd2=false;
                    }

                  if(Bid-OrderOpenPrice()>TakeProfit3*Point)
                    {
                     if(CloseOrd3) cl=OrderClose(OrderTicket(),Lot3,Bid,Slip,Blue);
                     CloseOrd3=false;
                    }
                    
                  if(Bid-OrderOpenPrice()>TakeProfit*Point)
                    {
                     cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
                    }                    
                 }

               if(OrderType()==OP_SELL)
                 {
                  if(OrderOpenPrice()-Ask>TakeProfit1*Point)
                    {
                     if(CloseOrd1) cl=OrderClose(OrderTicket(),Lot1,Ask,Slip,Red);
                     CloseOrd1=false;
                    }

                  if(OrderOpenPrice()-Ask>TakeProfit2*Point)
                    {
                     if(CloseOrd2) cl=OrderClose(OrderTicket(),Lot2,Ask,Slip,Red);
                     CloseOrd2=false;
                    }

                  if(OrderOpenPrice()-Ask>TakeProfit3*Point)
                    {
                     if(CloseOrd3) cl=OrderClose(OrderTicket(),Lot3,Ask,Slip,Red);
                     CloseOrd3=false;
                    }
                    
                  if(OrderOpenPrice()-Ask>TakeProfit*Point)
                    {
                     cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
                    }                    
                 }
              }
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int p=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) p++;
           }
        }
     }

   if(p<1)
     {
      CloseOrd1=true;
      CloseOrd2=true;
      CloseOrd3=true;
      OpenPos();
     }
   if(p>0) CloseOrders();
   Comment("\n Positions: ",p,
           "\n CloseOrd1: ",CloseOrd1,
           "\n CloseOrd2: ",CloseOrd2,
           "\n CloseOrd3: ",CloseOrd3);
//---
  }
//+------------------------------------------------------------------+


Редактирован: 18 сентября 2015, 17:40
avatar

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

  • 18 сентября 2015, 16:47
+
0
Заработало. Спасибо всё как надо !*good* 
Редактирован: 18 сентября 2015, 17:17
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 18 сентября 2015, 16:56
+
0
Немного я поторопился не закрывает последний лот
extern double Lot 

Значение там должно быть первоначального лота или остатка? Но в любом случае, я пробовал и так и так, не закрывает. Первые три всё хорошо…
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 18 сентября 2015, 17:33
+
0
Сделал чтобы после трех закрывал остаток когда цена превысит TakeProfit. Обновил в последнем коде на странице.
avatar

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

  • 18 сентября 2015, 17:43
+
0
ок
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 18 сентября 2015, 17:46
+
0
Поставил минимальные значения и закрыл сначала 3 а потом остаток. Обновил в базе: www.opentraders.ru/downloads/872/

Редактирован: 18 сентября 2015, 17:59
avatar

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

  • 18 сентября 2015, 17:55
+
0
Также отработал и на бай:

avatar

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

  • 18 сентября 2015, 18:03
+
0
*good* 
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 18 сентября 2015, 18:57
+
0
А возможно, чтобы советник заново обновлял уровни, где уже прошло частичное закрытие, а также после полного закрытия, искал новые ордера или мог вести параллельно несколько ордеров!!!
avatar

  7  PetrovMaxim Сообщений: 119 - Максим

  • 19 февраля 2016, 08:05
+
0
А возможно, чтобы советник заново обновлял уровни, где уже прошло частичное закрытие, а также после полного закрытия, искал новые ордера или мог вести параллельно несколько ордеров!!!

Сформулируйте полностью ТЗ в новом топике и я уже буду смотреть насколько это возможно.
avatar

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

  • 19 февраля 2016, 09:36
+
0
Добрый день! хороший советник, сейчас его тестирую, одно но, если на одном графике открыто несколько сделок, то он их не различает, к примеру в паре была открыта сделка, по заданным параметрам были закрыты TP1 TP2 после этого открывается еще одна сделка и советник сразу же закрывает в ней часть позиции, как решить данный вопрос или я просто не правильно что-то настроил?

Редактирован: 18 марта 2019, 10:49
avatar

  0  didroids Сообщений: 3

  • 18 марта 2019, 10:45
+
0
В столе заказов опубликуйте заказ на доработку советника попросите что бы прикурутили магик, тогда будет работать так как надо вам., приложите этот сов что бы Андрей понял какую сову надо доделывать, потребуется поручитель, я выступлю.
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 18 марта 2019, 10:53
+
0
спасибо, сейчас попробую сделать
avatar

  0  didroids Сообщений: 3

  • 18 марта 2019, 10:54
+
0
Нет доступа, не могу ни написать в стол заказов ни личное сообщение отправить! не могли бы вы опубликовать заказ? советник CloseLots
Буду очень благодарен, если вас не затруднит!
avatar

  0  didroids Сообщений: 3

  • 18 марта 2019, 11:10
+
0
Подождите пару дней, Ваш уровень прибавится и Вы сможете писать, потом сможете сами создавать заказы. А на данном этапе я могу выступить для вас поручителем, но создавать задания я не буду, извините мне это уже не интересно. А пока пообщайтесь в чате, ( если есть желание)
avatar

  17  oyama Автор Сообщений: 350 - Александр

  • 18 марта 2019, 11:14

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