[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 388

 

¿Puedes decirme si es posible poner los EAs en carpetas en lugar de almacenarlos todos en una carpeta...\Nexpertos?

Y que también trabajen desde estas carpetas.

Tengo 20 versiones de un EA y 20 de otro, y es imposible desbloquear el conjunto de archivos.

 

Buenas tardes.

La búsqueda no ha servido de nada.

Tal vez alguien haya visto un guión similar.

El punto: el script especifica: símbolo, compra/venta, volumen

debería haber entre 5 y 7 campos de este tipo.

para la apertura simultánea en varios símbolos, cuyo volumen no es igual a 0.

Gracias.

Sinceramente.

 
Buenas tardes. Tengo una pregunta para usted.... Entrada por estocástico (5,14,3) salida también por estocástico pero con otro periodo (5,3,3). No sé cómo puedo utilizar estocástico para la salida, pero no la señal de retorno.
Tengo un problema y no tengo ni idea de cómo se puede solucionar, voy a intentar explicarlo.
Así, en el código que he publicado, hay 2 funciones
//+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
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;
}
En el void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) tenemos que poner una condición que decida si debemos dejar o cerrar la orden.
He intentado poner condiciones pero nada funciona....
¿Puede alguien mirar y mostrar si hay un error en estas funciones o me confundí....
Archivos adjuntos:
 
Snegovik:

Buenas tardes.

La búsqueda no ha servido de nada.

Tal vez alguien haya visto un guión similar.

El punto: el script especifica: símbolo, compra/venta, volumen

debería haber entre 5 y 7 campos de este tipo.

para la apertura simultánea en varios símbolos, cuyo volumen no es igual a 0.

Gracias.

Sinceramente.


Esa es una redacción muy buena. Lo que pregunta el interlocutor...
 
belous:
Buenas tardes. Tengo una pregunta para usted.... Entrada por estocástico (5,14,3) salida también por estocástico pero con otro periodo (5,3,3). No entiendo cómo puedo utilizar estocástico para la salida, pero no la señal de retorno.
Tengo un problema y no tengo ni idea de cómo se puede solucionar, voy a intentar explicarlo.
En el código, que he expuesto, hay 2 funciones
En el void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) tenemos que poner una condición que decida si debemos dejar o cerrar la orden...
He intentado poner condiciones pero nada funciona....
Que alguien mire y muestre si hay algún error en estas funciones o la he fastidiado....


Tal vez sea útil. No he mirado su código.
Las funciones de Kim.

  //========================================================================================================================
  // Закрытие открытых позиций на продажу 
  //-------------------------------------------------------------------------------------------------------------------------
  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:
Buenas tardes. Tengo una pregunta para usted.... Estoy entrando por estocástico (5,14,3) y saliendo por estocástico sólo con otro periodo (5,3,3). No entiendo cómo puedo utilizar estocástico para la salida, pero no la señal de retorno?

Yo no crearía un array de tickets para cerrar, sino que en el bucle de enumeración de órdenes de mercado comprobaría cada orden alimentando su ticket a la entrada de la función de cierre con una comprobación de posibles condiciones.

 
¿La oferta puede ser 0 en algún momento?
 
YOUNGA:
¿La oferta puede ser 0 en algún momento?
¿Es difícil de comprobar, o es de pereza? Es más fácil hacer la pregunta. ¿El precio de la oferta puede ser cero? Puede si no se vende nada8-(
 
drknn:

La redacción es muy buena. Lo que pregunta el interlocutor...


hay scripts que abren simultáneamente la venta de un símbolo en la segunda compra.

Estoy interesado en un script que pueda abrir simultáneamente una venta/compra en 7-10 símbolos, con un volumen especificado para cada símbolo, a precios actuales.

Ejemplo:

vender EURUSD 1

comprar GBPUSD 1.5

vender USDCAD 1.2

comprar AUDUSD 1.1

comprar NZDUSD 2

comprar USDCHF 3

El script MultiOrders es casi perfecto, sólo que hay 5 campos para los símbolos.

 
Snegovik:


Hay scripts que abren simultáneamente la venta de un símbolo en la segunda compra.

Estoy interesado en un script que pueda abrir simultáneamente una venta/compra en 7-10 símbolos, con un volumen especificado para cada símbolo, a precios actuales.

Ejemplo:

vender EURUSD 1

comprar GBPUSD 1.5

vender USDCAD 1.2

comprar AUDUSD 1.1

comprar NZDUSD 2

comprar USDCHF 3

El script MultiOrders es casi perfecto, sólo que hay 5 campos para los símbolos.

Igualmente. Con este script, usted, en su script, saldrá aún mejor, e incluso puede añadir una funcionalidad extra.
Razón de la queja: