Скрипт закрывающий все Buy и Sell ордера

 

Голову сломала уже! Должно же быть такое!

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

Скрипт должен закрывать все ордера по любым инструментам.

Спасибо за внимание!

 

Скрипт


extern int  Slippage   = 7;     // Проскальзывание

int start()
{
bool   Result;
int    i,Pos,Error,Total;
//int    Dgts=MarketInfo(Symbol(),MODE_DIGITS);
string FileName, str;     
//----
  Total=OrdersTotal();
  if(Total>0)
  {
     for(i=Total-1; i>=0; i--) 
     {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) 
        {
           // Только Buy и Sell по символу
           Pos=OrderType();
           if(Pos==OP_BUY || Pos==OP_SELL) 
           {
              RefreshRates();
              if(Pos==OP_BUY) 
              Result=OrderClose(OrderTicket(),
                                OrderLots(),
                                NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits),
                                Slippage,
                                CLR_NONE);
              else
              Result=OrderClose(OrderTicket(),
                                OrderLots(),
                                NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),Digits), 
                                Slippage,
                                CLR_NONE);
              if(Result!=true) 
              { 
                 Error=GetLastError(); 
                 Alert("_CloseAllBuySell LastError = ",Error); 
              }
              else Error=0;
           }
        }
     }
  }
  return(0);
}
 

вот, сделал себе из функций Кима, можно:

1. закрывать всё

2. закрывать сделки по определённому инструменту

3. закрывать определённые сделки - бай/селл

4. закрывать сделки по определённому магику

в общем - что хотите, то и закрывайте

//+----------------------------------------------------------------------------+
//|                                                      CloseAllPositions.mq4 |
//|  Версия   : 27.10.2008                                                     |
//|  Описание : Скрипт закрытия позиций по рыночной цене, с возможностью       |
//|             выбора параметров закрываемых позиций                          |
//+----------------------------------------------------------------------------+
#property copyright ""
#property link      ""
#property show_inputs
//------- Внешние параметры скрипта -------------------------------------------+
extern string _P_Trade       = "---------- Параметры торговли";
extern string  sy            = ""; //наименование инструмента 
                                   //(""   - любой символ,NULL - текущий символ)
extern int     op            = -1; //операция     (-1   - любая позиция)
extern int     mn            = -1; //MagicNumber  (-1   - любой магик)
extern string _P_Performance = "---------- Параметры исполнения";
extern bool    UseSound      = False;          // Исп. звуковой сигнал
extern string  SoundSuccess  = "ok.wav";       // Звук успеха
extern string  SoundError    = "timeout.wav";  // Звук ошибки
extern int     Slippage      = 3;              // Проскальзывание цены
extern int     NumberOfTry   = 5;              // Количество попыток
//------- Глобальные переменные скрипта ---------------------------------------+
color clCloseBuy  = Blue;      // Цвет значка закрытия покупки
color clCloseSell = Red;       // Цвет значка закрытия продажи
color clDelete    = Yellow;    // Цвет значка удаления ордера
//------- Подключение внешних модулей -----------------------------------------+
#include <stdlib.mqh>          // Стандартная библиотека МТ4

//+----------------------------------------------------------------------------+
//| script program start function                                              |
//+----------------------------------------------------------------------------+
void start() {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
        }
      }
    }
  }
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 19.02.2008                                                      |
//|  Описание: Закрытие одной предварительно выбранной позиции                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
  bool   fc;
  color  clClose;
  double ll, pa, pb, pp;
  int    err, it;

  if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    for (it=1; it<=NumberOfTry; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      pa=MarketInfo(OrderSymbol(), MODE_ASK);
      pb=MarketInfo(OrderSymbol(), MODE_BID);
      if (OrderType()==OP_BUY) {
        pp=pb; clClose=clCloseBuy;
      } else {
        pp=pa; clClose=clCloseSell;
      }
      ll=OrderLots();
      fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
      if (fc) {
        if (UseSound) PlaySound(SoundSuccess); break;
      } else {
        err=GetLastError();
        if (UseSound) PlaySound(SoundError);
        if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
        Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
              ErrorDescription(err),", try ",it);
        Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);
        Print("sy=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
              "  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());
        Sleep(1000*5);
      }
    }
  } else Print("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование торговой операции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    op - идентификатор торговой операции                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("BuyLimit");
    case OP_SELLLIMIT: return("SellLimit");
    case OP_BUYSTOP  : return("BuyStop");
    case OP_SELLSTOP : return("SellStop");
    default          : return("Unknown Operation");
  }
}
//+----------------------------------------------------------------------------+
 
А зачем ломать голову, если эти скрипты есть в стандартной поставке МТ4? Для закрытия скрипт - Close, для удаления отложенников - delete_pendin.
 
Scriptong >>:
А зачем ломать голову, если эти скрипты есть в стандартной поставке МТ4? Для закрытия скрипт - Close, для удаления отложенников - delete_pendin.

затем, что задачи есть разные

 
alexx_v >>:

затем, что задачи есть разные

В чем они разные? Требуется: 

tayny писал(а) 

Скрипт должен закрывать все ордера по любым инструментам.

Стандартные скрипты эти задачи выполняют. 

 
alexx_v >>:

вот, сделал себе из функций Кима, можно:

1. закрывать всё

2. закрывать сделки по определённому инструменту

3. закрывать определённые сделки - бай/селл

4. закрывать сделки по определённому магику

в общем - что хотите, то и закрывайте

Огромное спасибо! Это то, что я искала! Стабильных профитов вам и всем кто откликнулся!

 
стандартные скрипты решают стандартные задачи, если просящему не нужен НЕ стандартный скрипт для НЕ стандартных задач, он воспользуется Вашим советом :)
 
tayny >>:

Огромное спасибо! Это то, что я искала! Стабильных профитов вам и всем кто откликнулся!

надеюсь разберетесь как пользоваться, в принципе описание краткое есть чего, для чего и как писать в скрипт перед выполнением

Причина обращения: