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

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от axe44



Крутые памм-счета Комментариев 6
2017-10-24 11:58:58Рейтинг 0

БКС Комментариев 8
2017-08-11 02:57:12Рейтинг 0

торги
2017-01-26 00:01:37Рейтинг 0

HelloDual v3.0 Комментариев 3
2017-11-19 02:21:03Рейтинг 0

Создание советников бесплатно Комментариев 2
2017-07-16 22:54:20Рейтинг 0

Скрипт

Привет.
Прошу небольшой скрипт.

Скрипт ищет ордер, определяет ордер и закрывает частично сделку скажем процентов на десять.

Туплю с утра, а код вечером хочу собрать полностью, чтобы на ночь глядя оптимизацию пустить. Спасибо.
  • 0
  • Просмотров: 2097
  • 14 июля 2019, 12:03
  • axe44
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Похоже наспамил. Извините
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 июля 2019, 12:05
+
0
нужно подробнее. сколько ордеров в рынке, какие, какой закрыть и т.д.
avatar

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

  • 14 июля 2019, 12:11
+
0
2 маркет ордера в рынке. Нужно один закрыть на 10%, а второй не трогать
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 июля 2019, 12:44
+
0
какой из них потрогаем? :D 
avatar

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

  • 14 июля 2019, 12:47
+
0
Давай того что с ноликом, с палочкой для Окси оставим…
Эмили серьезно то эту ласточку оптимизирую:
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 июля 2019, 12:50
+
0
Мыслей как закрывать ордера нету у двоих *drinks* 
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 июля 2019, 15:55
+
0
у меня выходной сегодня. все по желанию только делаю
avatar

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

  • 14 июля 2019, 17:09
+
0
Ну, вечером в воскресенье я если что то и делаю то только если очень хочется.
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 июля 2019, 17:15
+
0
avatar

  9  Servir Сообщений: 84

  • 15 июля 2019, 20:31
+
0
Спасибо. Чего хочешь в замен?
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 15 июля 2019, 22:06
+
+1
Помогаю кому смогу за спасибо
avatar

  9  Servir Сообщений: 84

  • 16 июля 2019, 06:06
+
0
Есть две ошибки
Предлагаю исправить:
Строчка 98 —
if (OrderSymbol()==Symbol() && (OMN==Tipp || Tipp==-1))

На
if (OrderSymbol()==Symbol() && (OMN==Tipp))
. Иначе в нет зависимости от того кем выставлен ордер человеком или роботом
Ну, и чуда не произошло. Ты то же напоролся на те же грабли что и я.
Сторчка 221 не работает.
result=OrderClose(OrderTicket(),NormalizeDouble(OrderLots()*Proc/100,2),price,3,CLR_NONE);

Есть такие брокеры берущие котировки с биржи «Санкт-Петербург». Так у них в правиле минимальный лот 0.1, а шаг 0.01.
Если сделать нормализацию выражения до 2 то ошибка, если до одного — то то же ошибка. Большой соблазн поставить Digits, но с ним та же беда.
Оптимальный вариант довести минимальное значение до
MarketInfo(Symbol(),MODE_MINLOT)
, но тогда нужно найти этот самый лот на этом самом ордере.
Короче завал…
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 17 июля 2019, 10:53
+
0
Ещё очень большой вопрос как среагирует такой вот брокер если минимальный лот может быть 0.1, был 0.11, а закрыли 0.1, то есть осталось 0.01
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 17 июля 2019, 11:04
+
0
Закончил скрипт.
Теперь это выглядит так:

//+------------------------------------------------------------------+
//| Удаление текущих ордеров                                         |
//+------------------------------------------------------------------+  
bool ChastClose(int type=-1)
{   bool   result;
   double price;
   int    cmd,error,total=OrdersTotal();
 for(int i=0; i<total; i++)
     {if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {if(OrderSymbol()!=Symbol()||OrderType()!=OP_BUY||OrderType()!=OP_SELL)continue;
      cmd=OrderType();
      if(cmd==type )
        {
         while(true)
           {
            if(cmd==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),NormalizeDouble(OrderLots()*Proc/100,Digits),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("Ошибка = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     }
   else Print( "Ошибка во время выбора ордера ", GetLastError());}
return(result);}  
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 19 июля 2019, 22:40
+
0
Теперь осталось сделать две вещи: Собрать советника с защитой от гепов и от всяких там брекситов…
Может и странный вопрос, но может кто поможет?
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 19 июля 2019, 22:43
+
+1

//+------------------------------------------------------------------+
//| Удаление текущих ордеров                                         |
//+------------------------------------------------------------------+  
void ChastClose(int type=-1)
{   int   result;
    double price;
    
   int    error,total=OrdersTotal();
 for( i=0; i<total; i++)
     {if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      
      if(OrderType()==type )
        {
         while(true)
           {
            if(OrderType()==OP_BUY) price=Bid;
            else            price=Ask;
            double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
            if (NormalizeDouble(OrderLots()*Proc/100,Digits)<MinLot) lot=MinLot;
            else lot=NormalizeDouble(OrderLots()*Proc/100,Digits);
            result=OrderClose(OrderTicket(),lot,price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("Ошибка = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     }
   else Print( "Ошибка во время выбора ордера ", GetLastError());}
}  
  
Окончательная версия.

Всем спасибо *drinks* 
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 20 июля 2019, 01:10
+
+1
Рабочий код

//+------------------------------------------------------------------+
//| Удаление текущих ордеров                                         |
//+------------------------------------------------------------------+  
void ChastClose(int type=-1)
{   int   result;
    double price;
    
   int    error,total=OrdersTotal();
 for( i=0; i<total; i++)
     {if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      
      if(OrderType()==type )
        {
            if(OrderType()==OP_BUY) price=Bid;
            else            price=Ask;
            double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
            lot=NormalizeDouble(OrderLots()*Proc/100,2);
            if (lot<MinLot) lot=MinLot;
            result=OrderClose(OrderTicket(),lot,price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("Ошибка = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           
        }
     }
   else Print( "Ошибка во время выбора ордера ", GetLastError());}
}  

Для кого это пишу не знаю
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 20 июля 2019, 14:28
+
0
График получается вот так.

В конце увеличенные объёмы в связи с окончанием тестирования и закрытием всех ордеров.
Сама по себе идея открытия двух ордеров и их частичное закрытие по движению цены убыточных работает, но чего то не хватает.
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 20 июля 2019, 15:24
+
0
По своей сути доказал «Стратегию черепахи» которая наращивает позицию по движению, а так же для себя что сама по себе она не очень.
Троли, чего молчим?
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 20 июля 2019, 15:26

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