EA脚本-MQL5

MT5交易软件下载:点我下载

//+------------------------------------------------------------------+
//|                                          CloseOrdersBySymbol.mq5 |
//|                               Copyright © 2017, Nikolay Kositsin | 
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+------------------------------------------------------------------+  
#property copyright "Copyright © 2017, Nikolay Kositsin"
#property link "farria@mail.redcom.ru" 
//---- номер версии скрипта
#property version   "1.10" 
//---- показывать входные параметры
#property script_show_inputs
//+----------------------------------------------+
//| ВХОДНЫЕ ПАРАМЕТРЫ СКРИПТА                    |
//+----------------------------------------------+
input uint RTOTAL=4;        // Число повторов при неудачных сделках
input uint SLEEPTIME=1;     // Время паузы между повторами в секундах
input uint  Deviation_=10;  // Отклонение цены
//+------------------------------------------------------------------+ 
//| start function                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//----   
   for(uint count=0; count<=RTOTAL && !IsStopped(); count++)
     {
      //---- закрываем все выставленные ордера по текущему символу
      int total=OrdersTotal();
      if(!total) return; // все ордера закрыты
      for(int pos=total-1; pos>=0; pos--)
        {
         ulong ticket=ulong(OrderGetTicket(pos));
         if(!OrderSelect(ticket)) continue;
         string symbol=OrderGetString(ORDER_SYMBOL);
         if(symbol!=Symbol()) continue;
         bool _Close=true;
         OrderCloseByTicket(_Close,symbol,ticket,Deviation_);
        }
      if(!OrdersTotal()) break;
      Sleep(SLEEPTIME*1000);
     }
//----
  }
//+------------------------------------------------------------------+
//| Закрываем длинную позицию                                        |
//+------------------------------------------------------------------+
bool OrderCloseByTicket
(
 bool &Signal,         // флаг разрешения на сделку
 const string symbol,  // торговая пара сделки
 ulong ticket,         // тикет
 uint deviation        // слиппаж
 )
  {
//----
   if(!Signal) return(true);

//---- Объявление структур торгового запроса и результата торгового запроса
   MqlTradeRequest request;
   MqlTradeResult result;
//---- Объявление структуры результата проверки торгового запроса 
   MqlTradeCheckResult check;

//---- обнуление структур
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(check);

//---- Инициализация структуры торгового запроса MqlTradeRequest для удаления отложенного ордера
   request.action=TRADE_ACTION_REMOVE; 
   request.deviation=deviation;
   request.order=ticket;
//----     
   string comment="";
   string ordertype=EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
   StringConcatenate(comment,"<<< ============ ",__FUNCTION__,"(): Удаляем отложенный ",ordertype," ордер по ",symbol," с тикетом ",string(ticket)," ============ >>>");
   Print(comment);

//---- Отправка приказа на закрывание позиции на торговый сервер
   if(!OrderSend(request,result) || result.retcode!=TRADE_RETCODE_DONE)
     {
      Print(__FUNCTION__,"(): Невозможно удалить ",ordertype," ордер с тикетом ",string(ticket),"!");
      Print(__FUNCTION__,"(): OrderSend(): ",ResultRetcodeDescription(result.retcode));
      return(false);
     }
   else
   if(result.retcode==TRADE_RETCODE_DONE)
     {
      Signal=false;
      comment="";
      StringConcatenate(comment,"<<< ============ ",__FUNCTION__,"(): Отложенный ",ordertype," ордер по ",symbol," с тикетом ",string(ticket)," удалён ============ >>>");
      Print(comment);
      PlaySound("ok.wav");
     }
   else
     {
      Print(__FUNCTION__,"(): Невозможно удалить ",ordertype," ордер с тикетом ",string(ticket),"!");
      Print(__FUNCTION__,"(): OrderSend(): ",ResultRetcodeDescription(result.retcode));
      return(false);
     }
//----
   return(true);
  }
//+------------------------------------------------------------------+
//| возврат стрингового результата торговой операции по его коду     |
//+------------------------------------------------------------------+
string ResultRetcodeDescription(int retcode)
  {
   string str;
//----
   switch(retcode)
     {
      case TRADE_RETCODE_REQUOTE: str="Реквота"; break;
      case TRADE_RETCODE_REJECT: str="Запрос отвергнут"; break;
      case TRADE_RETCODE_CANCEL: str="Запрос отменен трейдером"; break;
      case TRADE_RETCODE_PLACED: str="Ордер размещен"; break;
      case TRADE_RETCODE_DONE: str="Заявка выполнена"; break;
      case TRADE_RETCODE_DONE_PARTIAL: str="Заявка выполнена частично"; break;
      case TRADE_RETCODE_ERROR: str="Ошибка обработки запроса"; break;
      case TRADE_RETCODE_TIMEOUT: str="Запрос отменен по истечению времени";break;
      case TRADE_RETCODE_INVALID: str="Неправильный запрос"; break;
      case TRADE_RETCODE_INVALID_VOLUME: str="Неправильный объем в запросе"; break;
      case TRADE_RETCODE_INVALID_PRICE: str="Неправильная цена в запросе"; break;
      case TRADE_RETCODE_INVALID_STOPS: str="Неправильные стопы в запросе"; break;
      case TRADE_RETCODE_TRADE_DISABLED: str="Торговля запрещена"; break;
      case TRADE_RETCODE_MARKET_CLOSED: str="Рынок закрыт"; break;
      case TRADE_RETCODE_NO_MONEY: str="Нет достаточных денежных средств для выполнения запроса"; break;
      case TRADE_RETCODE_PRICE_CHANGED: str="Цены изменились"; break;
      case TRADE_RETCODE_PRICE_OFF: str="Отсутствуют котировки для обработки запроса"; break;
      case TRADE_RETCODE_INVALID_EXPIRATION: str="Неверная дата истечения ордера в запросе"; break;
      case TRADE_RETCODE_ORDER_CHANGED: str="Состояние ордера изменилось"; break;
      case TRADE_RETCODE_TOO_MANY_REQUESTS: str="Слишком частые запросы"; break;
      case TRADE_RETCODE_NO_CHANGES: str="В запросе нет изменений"; break;
      case TRADE_RETCODE_SERVER_DISABLES_AT: str="Автотрейдинг запрещен сервером"; break;
      case TRADE_RETCODE_CLIENT_DISABLES_AT: str="Автотрейдинг запрещен клиентским терминалом"; break;
      case TRADE_RETCODE_LOCKED: str="Запрос заблокирован для обработки"; break;
      case TRADE_RETCODE_FROZEN: str="Ордер или позиция заморожены"; break;
      case TRADE_RETCODE_INVALID_FILL: str="Указан неподдерживаемый тип исполнения ордера по остатку"; break;
      case TRADE_RETCODE_CONNECTION: str="Нет соединения с торговым сервером"; break;
      case TRADE_RETCODE_ONLY_REAL: str="Операция разрешена только для реальных счетов"; break;
      case TRADE_RETCODE_LIMIT_ORDERS: str="Достигнут лимит на количество отложенных ордеров"; break;
      case TRADE_RETCODE_LIMIT_VOLUME: str="Достигнут лимит на объем ордеров и позиций для данного символа"; break;
      case TRADE_RETCODE_INVALID_ORDER: str="Неверный или запрещённый тип ордера"; break;
      case TRADE_RETCODE_POSITION_CLOSED: str="Позиция с указанным POSITION_IDENTIFIER уже закрыта"; break;
      case TRADE_RETCODE_INVALID_CLOSE_VOLUME: str="Закрываемый объем превышает текущий объем позиции"; break;
      case TRADE_RETCODE_CLOSE_ORDER_EXIST: str="Для указанной позиции уже есть ордер на закрытие"; break;
      case TRADE_RETCODE_LIMIT_POSITIONS: str="Количество открытых позиций, которое можно одновременно иметь на счете, может быть ограничено настройками сервера"; break;
      //case : str=""; break;
      //case : str=""; break;
      //case : str=""; break;
      //case : str=""; break;
      default: str="Неизвестный результат";
     }
//----
   return(str);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                                               CloseAllOrders.mq5 |
//|                               Copyright © 2017, Nikolay Kositsin | 
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+------------------------------------------------------------------+  
#property copyright "Copyright © 2017, Nikolay Kositsin"
#property link "farria@mail.redcom.ru" 
//---- номер версии скрипта
#property version   "1.10" 
//---- показывать входные параметры
#property script_show_inputs
//+----------------------------------------------+
//| ВХОДНЫЕ ПАРАМЕТРЫ СКРИПТА                    |
//+----------------------------------------------+
input uint RTOTAL=4;        // Число повторов при неудачных сделках
input uint SLEEPTIME=1;     // Время паузы между повторами в секундах
input uint  Deviation_=10;  // Отклонение цены
//+------------------------------------------------------------------+ 
//| start function                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//----   
   for(uint count=0; count<=RTOTAL && !IsStopped(); count++)
     {
      //---- закрываем все выставленные ордера по текущему символу
      int total=OrdersTotal();
      if(!total) return; // все ордера закрыты
      for(int pos=total-1; pos>=0; pos--)
        {
         ulong ticket=ulong(OrderGetTicket(pos));
         if(!OrderSelect(ticket)) continue;
         string symbol=OrderGetString(ORDER_SYMBOL);
         bool _Close=true;
         OrderCloseByTicket(_Close,symbol,ticket,Deviation_);
        }
      if(!OrdersTotal()) break;
      Sleep(SLEEPTIME*1000);
     }
//----
  }
//+------------------------------------------------------------------+
//| Закрываем длинную позицию                                        |
//+------------------------------------------------------------------+
bool OrderCloseByTicket
(
 bool &Signal,         // флаг разрешения на сделку
 const string symbol,  // торговая пара сделки
 ulong ticket,         // тикет
 uint deviation        // слиппаж
 )
  {
//----
   if(!Signal) return(true);

//---- Объявление структур торгового запроса и результата торгового запроса
   MqlTradeRequest request;
   MqlTradeResult result;
//---- Объявление структуры результата проверки торгового запроса 
   MqlTradeCheckResult check;

//---- обнуление структур
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(check);

//---- Инициализация структуры торгового запроса MqlTradeRequest для удаления отложенного ордера
   request.action=TRADE_ACTION_REMOVE; 
   request.deviation=deviation;
   request.order=ticket;
//----     
   string comment="";
   string ordertype=EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
   StringConcatenate(comment,"<<< ============ ",__FUNCTION__,"(): Удаляем отложенный ",ordertype," ордер по ",symbol," с тикетом ",string(ticket)," ============ >>>");
   Print(comment);

//---- Отправка приказа на закрывание позиции на торговый сервер
   if(!OrderSend(request,result) || result.retcode!=TRADE_RETCODE_DONE)
     {
      Print(__FUNCTION__,"(): Невозможно удалить ",ordertype," ордер с тикетом ",string(ticket),"!");
      Print(__FUNCTION__,"(): OrderSend(): ",ResultRetcodeDescription(result.retcode));
      return(false);
     }
   else
   if(result.retcode==TRADE_RETCODE_DONE)
     {
      Signal=false;
      comment="";
      StringConcatenate(comment,"<<< ============ ",__FUNCTION__,"(): Отложенный ",ordertype," ордер по ",symbol," с тикетом ",string(ticket)," удалён ============ >>>");
      Print(comment);
      PlaySound("ok.wav");
     }
   else
     {
      Print(__FUNCTION__,"(): Невозможно удалить ",ordertype," ордер с тикетом ",string(ticket),"!");
      Print(__FUNCTION__,"(): OrderSend(): ",ResultRetcodeDescription(result.retcode));
      return(false);
     }
//----
   return(true);
  }
//+------------------------------------------------------------------+
//| возврат стрингового результата торговой операции по его коду     |
//+------------------------------------------------------------------+
string ResultRetcodeDescription(int retcode)
  {
   string str;
//----
   switch(retcode)
     {
      case TRADE_RETCODE_REQUOTE: str="Реквота"; break;
      case TRADE_RETCODE_REJECT: str="Запрос отвергнут"; break;
      case TRADE_RETCODE_CANCEL: str="Запрос отменен трейдером"; break;
      case TRADE_RETCODE_PLACED: str="Ордер размещен"; break;
      case TRADE_RETCODE_DONE: str="Заявка выполнена"; break;
      case TRADE_RETCODE_DONE_PARTIAL: str="Заявка выполнена частично"; break;
      case TRADE_RETCODE_ERROR: str="Ошибка обработки запроса"; break;
      case TRADE_RETCODE_TIMEOUT: str="Запрос отменен по истечению времени";break;
      case TRADE_RETCODE_INVALID: str="Неправильный запрос"; break;
      case TRADE_RETCODE_INVALID_VOLUME: str="Неправильный объем в запросе"; break;
      case TRADE_RETCODE_INVALID_PRICE: str="Неправильная цена в запросе"; break;
      case TRADE_RETCODE_INVALID_STOPS: str="Неправильные стопы в запросе"; break;
      case TRADE_RETCODE_TRADE_DISABLED: str="Торговля запрещена"; break;
      case TRADE_RETCODE_MARKET_CLOSED: str="Рынок закрыт"; break;
      case TRADE_RETCODE_NO_MONEY: str="Нет достаточных денежных средств для выполнения запроса"; break;
      case TRADE_RETCODE_PRICE_CHANGED: str="Цены изменились"; break;
      case TRADE_RETCODE_PRICE_OFF: str="Отсутствуют котировки для обработки запроса"; break;
      case TRADE_RETCODE_INVALID_EXPIRATION: str="Неверная дата истечения ордера в запросе"; break;
      case TRADE_RETCODE_ORDER_CHANGED: str="Состояние ордера изменилось"; break;
      case TRADE_RETCODE_TOO_MANY_REQUESTS: str="Слишком частые запросы"; break;
      case TRADE_RETCODE_NO_CHANGES: str="В запросе нет изменений"; break;
      case TRADE_RETCODE_SERVER_DISABLES_AT: str="Автотрейдинг запрещен сервером"; break;
      case TRADE_RETCODE_CLIENT_DISABLES_AT: str="Автотрейдинг запрещен клиентским терминалом"; break;
      case TRADE_RETCODE_LOCKED: str="Запрос заблокирован для обработки"; break;
      case TRADE_RETCODE_FROZEN: str="Ордер или позиция заморожены"; break;
      case TRADE_RETCODE_INVALID_FILL: str="Указан неподдерживаемый тип исполнения ордера по остатку"; break;
      case TRADE_RETCODE_CONNECTION: str="Нет соединения с торговым сервером"; break;
      case TRADE_RETCODE_ONLY_REAL: str="Операция разрешена только для реальных счетов"; break;
      case TRADE_RETCODE_LIMIT_ORDERS: str="Достигнут лимит на количество отложенных ордеров"; break;
      case TRADE_RETCODE_LIMIT_VOLUME: str="Достигнут лимит на объем ордеров и позиций для данного символа"; break;
      case TRADE_RETCODE_INVALID_ORDER: str="Неверный или запрещённый тип ордера"; break;
      case TRADE_RETCODE_POSITION_CLOSED: str="Позиция с указанным POSITION_IDENTIFIER уже закрыта"; break;
      case TRADE_RETCODE_INVALID_CLOSE_VOLUME: str="Закрываемый объем превышает текущий объем позиции"; break;
      case TRADE_RETCODE_CLOSE_ORDER_EXIST: str="Для указанной позиции уже есть ордер на закрытие"; break;
      case TRADE_RETCODE_LIMIT_POSITIONS: str="Количество открытых позиций, которое можно одновременно иметь на счете, может быть ограничено настройками сервера"; break;
      //case : str=""; break;
      //case : str=""; break;
      //case : str=""; break;
      //case : str=""; break;
      default: str="Неизвестный результат";
     }
//----
   return(str);
  }
//+------------------------------------------------------------------+

一键开多单

//+------------------------------------------------------------------+
//|                                                      OpenBuy.mq5 |
//|                                           Copyright 2021,fxMeter |
//|                            https://www.mql5.com/zh/users/fxmeter |
//+------------------------------------------------------------------+
//https://www.mql5.com/zh/code/35392
#property copyright "Copyright 2021,fxMeter"
#property link      "https://www.mql5.com/zh/users/fxmeter"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
input ulong  Magic      = 123;      //魔术数
input double Lots       = 0.01;      //手数
input ulong  StopLoss   = 70;        //止损点数
input ulong  TakeProfit = 70;        //止盈点数
input string Comms      = "";       //单子注释


CTrade trade;
CSymbolInfo sym;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   trade.SetExpertMagicNumber(Magic);
   trade.SetDeviationInPoints(100);
   trade.SetTypeFillingBySymbol(Symbol());
   sym.Name(Symbol());
   sym.Refresh();
//---
   double sl = 0.0,tp = 0.0;
   double now = SymbolInfoDouble(Symbol(),SYMBOL_ASK);

   if(StopLoss > 0)
     {
      sl = now - StopLoss * Point();
      if(sl < 0)
         sl = 0.0;
     }

   if(TakeProfit > 0)
     {
      tp = now + TakeProfit * Point();
      if(tp < 0)
         tp = 0.0;
     }
   sl = sym.NormalizePrice(sl);
   tp = sym.NormalizePrice(tp);

   trade.Buy(Lots,NULL,0.0,sl,tp,Comms);
  }
//+------------------------------------------------------------------+

一键开空单

//+------------------------------------------------------------------+
//|                                                     OpenSell.mq5 |
//|                                           Copyright 2021,fxMeter |
//|                            https://www.mql5.com/zh/users/fxmeter |
//+------------------------------------------------------------------+
//https://www.mql5.com/zh/code/35392
#property copyright "Copyright 2021,fxMeter"
#property link      "https://www.mql5.com/zh/users/fxmeter"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
input ulong  Magic      = 123;      //魔术数
input double Lots       = 0.01;      //手数
input ulong  StopLoss   = 100;        //止损点数
input ulong  TakeProfit = 100;        //止盈点数
input string Comms      = "";       //单子注释


CTrade trade;
CSymbolInfo sym;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   trade.SetExpertMagicNumber(Magic);
   trade.SetDeviationInPoints(100);
   trade.SetTypeFillingBySymbol(Symbol());
   sym.Name(Symbol());
   sym.Refresh();
//---
   double sl = 0.0,tp = 0.0;
   double now = SymbolInfoDouble(Symbol(),SYMBOL_BID);

   if(StopLoss > 0)
     {
      sl = now + StopLoss * Point();
      if(sl < 0)
         sl = 0.0;
     }

   if(TakeProfit > 0)
     {
      tp = now - TakeProfit * Point();
      if(tp < 0)
         tp = 0.0;
     }
   sl = sym.NormalizePrice(sl);
   tp = sym.NormalizePrice(tp);
   trade.Sell(Lots,NULL,0.0,sl,tp,Comms);
  }
//+------------------------------------------------------------------+

一键平多仓

//+------------------------------------------------------------------+
//|                                                  CloseAllBuy.mq5 |
//|                                           Copyright 2018,fxMeter |
//|                            https://www.mql5.com/en/users/fxmeter |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018,fxMeter"
#property link      "https://www.mql5.com/en/users/fxmeter"
#property version   "1.00"
#include <Trade\trade.mqh>
#include <Trade\PositionInfo.mqh>
CTrade trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ulong ticket=0;
   int total= PositionsTotal();
   if(total<=0)return;
   for(int i=total-1;i>=0;i--)
     {
      if((ticket=PositionGetTicket(i))>0)
        {
         if(PositionGetSymbol(i)==Symbol() && (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY))
           {
            trade.PositionClose(ticket);
           }
        }
     }
  }
//+------------------------------------------------------------------+

一键平空仓

//+------------------------------------------------------------------+
//|                                                 CloseAllSell.mq5 |
//|                                           Copyright 2018,fxMeter |
//|                            https://www.mql5.com/en/users/fxmeter |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018,fxMeter"
#property link      "https://www.mql5.com/en/users/fxmeter"
#property version   "1.00"
#include <Trade\trade.mqh>
#include <Trade\PositionInfo.mqh>
CTrade trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ulong ticket=0;
   int total= PositionsTotal();
   if(total<=0)return;
   for(int i=total-1;i>=0;i--)
     {
      if((ticket=PositionGetTicket(i))>0)
        {
         if(PositionGetSymbol(i)==Symbol() && (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL))
           {
            trade.PositionClose(ticket);
           }
        }
     }
  }
//+------------------------------------------------------------------+

一键平所有仓位

//+------------------------------------------------------------------+
//|                                                  CloseAllPairs.mq5 |
//|                                           Copyright 2018,fxMeter |
//|                            https://www.mql5.com/en/users/fxmeter |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018,fxMeter"
#property link      "https://www.mql5.com/en/users/fxmeter"
#property version   "1.00"
#include <Trade\trade.mqh>
#include <Trade\PositionInfo.mqh>
CTrade trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ulong ticket=0;
   int total= PositionsTotal();
   if(total<=0)return;
   for(int i=total-1;i>=0;i--)
     {
      if((ticket=PositionGetTicket(i))>0)
        {
         if((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) || (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL))
           {
            trade.PositionClose(ticket);
           }
        }
     }
  }
//+------------------------------------------------------------------+
    © 版权声明
    THE END
    喜欢就支持一下吧
    点赞11赞赏 分享
    评论 共1条
    头像
    欢迎您留下宝贵的见解!
    提交
    头像

    昵称

    取消
    昵称表情代码图片
      • 头像阿斯柯0