[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 390

 
7777877:

Доброго времени суток. Вопрос следующего содержания: почему среди идентификаторов запроса функции MarketInfo есть параметр MODE_MARGINREQUIRED для определения количества свободных средств, необходимых для открытия 1 лота на покупку, но нет параметра для определения количества свободных средств, необходимых для открытия 1 лота на продажу? И как в таком случае определить, сколько надо иметь свободных средств, чтобы открыть 1 лот на продажу в том или ином ДЦ?

P.S. Чтобы не захламлять форум, заранее благодарю за ответ.

На продажу нужно чуть меньше средств, поэтому на практике можно пользоваться этим одним параметром.
 

Не подскажите, есть ли в возможность раскидать по папкам экспертов,а не хранить все в одной папке ...\experts?

И чтобы еще они из этих папок работали.

А то 20 версий одного эксперта, 20 другого и разобраться уже невозможно полным полно файлов.

 

Добрый день.

поиск не помог.

может кто-то видел подобный скрипт.

суть: в скрипте указывается: символ, buy/sell, объем

необходимо 5-7 таких полей.

для одновременного открытия по нескольким символам, объем которых не равен 0.

спасибо.

с ув.

 
Доброго времени суток. У меня к вам вопрос.... Вход по сигралу стохастика(5,14,3) выход тоже по стохастику только с другим периодом (5,3,3). Вот я не пойму как можно зделать выход по стохастику, а не по обратному сигнагалу?
У меня появилась проблема и я не представляю как ее можно решить постараюсь объяснить.
Значит в коде есть, который я выложил, есть 2 функции
//+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;

int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаем
if (type>OP_SELL) continue;

if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// тут решаем для каждого открытого ордера его судьбу
// оставить в рынке или добавить в массив на закрытие
if (type==OP_BUY)
{
//
// код разрешающий оставить покупку

// как пример
if (signal==OP_BUY) continue;
}

if (type==OP_SELL)
{
//
// код разрешающий оставить продажу

// как пример
if (signal==OP_SELL) continue;
}

closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера

// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем
// можно закрывать частично, тогда нужно переписать строку сверху
}
//----
return;
}

//+------------------------------------------------------------------+
//| Закрывает ордера с указанными тикетами |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;

int ticket,type;
double lots;
bool res;

int total=OrdersTotal();

for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении

// блок закрытия покупок
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

// блок закрытия продаж
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

}
//----
return;
}
В функции void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) нужно поставить условие после которого решиться оставлять ордер или закрывать его...
Пробовал ставить условия но ничего не получается....
Может кто нибуть посмотрит и покажет есть ли в этих функциях ошибка или это я накасячил....
Файлы:
 
Snegovik:

Добрый день.

поиск не помог.

может кто-то видел подобный скрипт.

суть: в скрипте указывается: символ, buy/sell, объем

необходимо 5-7 таких полей.

для одновременного открытия по нескольким символам, объем которых не равен 0.

спасибо.

с ув.


Ну и формулировочка - чёрт ногу поломает. О чём спрашивает вопрошающий...
 
belous:
Доброго времени суток. У меня к вам вопрос.... Вход по сигралу стохастика(5,14,3) выход тоже по стохастику только с другим периодом (5,3,3). Вот я не пойму как можно зделать выход по стохастику, а не по обратному сигнагалу?
У меня появилась проблема и я не представляю как ее можно решить постараюсь объяснить.
Значит в коде есть, который я выложил, есть 2 функции
В функции void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) нужно поставить условие после которого решиться оставлять ордер или закрывать его...
Пробовал ставить условия но ничего не получается....
Может кто нибуть посмотрит и покажет есть ли в этих функциях ошибка или это я накасячил....


Может будет полезно. Ваш код не смотрел.
Функции Кима.

  //========================================================================================================================
  // Закрытие открытых позиций на продажу 
  //-------------------------------------------------------------------------------------------------------------------------
  if(ExistPositions(NULL, OP_SELL, Magic, 0) == true) //если открыта позиция sell
  {
    if() // условие на закритие 
    {
      ClosePosFirstProfit(NULL, OP_SELL, Magic); //закрываем позицию
    }
  } 


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.03.2008                                                     |
//|  Описание : Возвращает флаг существования позиций                          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 19.02.2008                                                      |
//|  Описание: Закрытие одной предварительно выбранной позиции                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
  bool   fc;
  color  clClose;
  double ll, pa, pb, pp;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), 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();
      pp=NormalizeDouble(pp, dg);
      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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие позиций по рыночной цене сначала прибыльных           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit(string sy="", int op=-1, int mn=-1) {
  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) {
            if (OrderProfit()+OrderCommission()+OrderSwap()>0) ClosePosBySelect();
          }
        }
      }
    }
  }
  // Потом все остальные
  k=OrdersTotal();
  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();
        }
      }
    }
  }
}
 
 
belous:
Доброго времени суток. У меня к вам вопрос.... Вход по сигралу стохастика(5,14,3) выход тоже по стохастику только с другим периодом (5,3,3). Вот я не пойму как можно зделать выход по стохастику, а не по обратному сигнагалу?

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

 
Может ли bid быть равен 0 в какой либо момент?
 
YOUNGA:
Может ли bid быть равен 0 в какой либо момент?
А проверить трудно, или лень? Легче вопрос задать. Может ли быть цена предложения равна нулю? Может, если ничего не продается8-(
 
drknn:

Ну и формулировочка - чёрт ногу поломает. О чём спрашивает вопрошающий...


есть скрипты, которые одновременно открывают на одном символе sell на втором buy.

а меня интересует скрипт, который одновременно может открыть sell/buy на 7-10 символах, указанным для каждого символа объемом, по текущим ценам.

Пример:

sell EURUSD 1

buy GBPUSD 1.5

sell USDCAD 1.2

buy AUDUSD 1.1

buy NZDUSD 2

buy USDCHF 3

скрипт MultiOrders почти идеален, только там 5 полей для символов. и не знаю, как добавить еще .

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