Pregunta sobre el asesor multidivisa - página 3

 

Gracias, komposter. Empezó a hacerlo.

Pero aquí viene otra pregunta. Mi Asesor Experto tiene bloques de apertura de posiciones y barras de arrastre por separado.

int start()
  {
// ЗАДАЕМ ПЕРЕМЕННЫЕ ДЛЯ ВСЕХ ПАР
 
 
 // ОТКРЫВАЕМ ПОЗИЦИИ ПО ВСЕМ ПАРАМ
 
//----------------------------------------------
// -------- ТРЕЙЛИНГ СТОПЫ -----------------------
if (UseTrailing_ == True)                                             {                  
for (int r=0; r<OrdersTotal(); r++)                                    {
    if (OrderSelect(r, SELECT_BY_POS, MODE_TRADES))                     {
//--------------------------------------------------
     if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==MagicGBPUSD)     
      {  Трейлинг по фунту }
//--------------------------------------------------
     if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==MagicEURUSD)     
      {  Трейлинг по евро }
//--------------------------------------------------------------------
                                                                       }
                                                                      }
                                                                     }
//----------------------------------------------------------------------
   } 
  return(0);
SIN EMBARGO, puse un trozo de código (por ejemplo, para la libra) en la red de arrastre -

double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

Pero esta parte ya la utilicé cuando abrí posición en GBP. ¿Puedo volver a utilizar el mismo trailing stopper? ¿O tengo que volver a introducir el mismo tramo final para la libra, con nombres de valores ligeramente diferentes?

 
rid:
SIN EMBARGO, puse un trozo de código (por ejemplo, para la libra) en el final -
double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

Pero ya he utilizado esta tajada antes cuando abrí una posición en la libra. ¿Puedo volver a utilizar la misma pieza en la red de arrastre? ¿O tengo que volver a introducir la misma pieza con nombres ligeramente diferentes para estos valores en la búsqueda de la libra?

Puede insertar "este bit" al principio de la función start() y utilizar valores variables en todos los bloques.
 

Muchas gracias por su respuesta. ¡komposter !

Y una última pregunta importante. (Tengo miedo de parecer demasiado intrusivo, pero...) -

Para el tercer par yo (por varias razones) llamo a la biblioteca de arrastre. Desde la carpeta librares, por ejemplo.

¿Cómo estar en este caso? ¿Es necesario especificar lo mismo dentro de la biblioteca para este par

//RefreshRates();
 double bid = MarketInfo("USDCHF", MODE_BID);
 double ask = MarketInfo("USDCHF", MODE_ASK);
 double point =MarketInfo("USDCHF",MODE_POINT);

y cambiar el símbolo y el magik en consecuencia:

... .... .....
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        if (OrderType()==OP_BUY) {
          if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) {
            if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
              ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy); 
 .... ... ...
 
rid:

Para el tercer par (por varias razones) llamo a la biblioteca de arrastre. Desde la carpeta libraris, por ejemplo.
¿Cómo ser en este caso? ¿Tengo que establecer de forma similar dentro de la biblioteca

Depende de la biblioteca. Si sabe trabajar con órdenes de caracteres no nativos, no será un problema. Si no lo hace, será malo ;)
 

Esta es la biblioteca de salida de tres niveles de Kim. Ahora he entrado en el código. En lugar de un símbolo en todas partes pongo el nombre de la pareja y en lugar de un magik pongo el magik de mi pareja.

//+------------------------------------------------------------------+
//|                                                  a-TLE_v.1.6.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  v.1.6  Три уровня переноса стопа.                               |
//| 23.11.2005 v.a1.6  Реализация в виде универсального модуля.      |
//|                                                                  |
//|   Для использования добавить строку в модуле start               |
//|   if (UseTrailing) TrailingPositions();                          |
//+------------------------------------------------------------------+
 
//------- Внешние параметры модуля - уровни переноса--------------------
... ... ... ...
 
//+------------------------------------------------------------------+
//| Сопровождение позиций                                            |
//+------------------------------------------------------------------+
void TrailingPositions()                                  {
  for (int i=0; i<OrdersTotal(); i++)                       {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))           {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        ThreeLevelSystemOfOutput();
      }
    }
  }
}
 
//+------------------------------------------------------------------+
//| Трёхуровневая система выходов                                    |
//+------------------------------------------------------------------+
void ThreeLevelSystemOfOutput()                      {
   int sp=MarketInfo(OrderSymbol(), MODE_SPREAD);
  if ( бла-бла-бла)                                  {
    SimpleTrailingPositions();
                                                      }
                                                      }
 
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void SimpleTrailingPositions() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
... ... ...
   
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
... ... ...
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLossInPoint(int pp) {
    double ldSL=0, mp=MarketInfo(OrderSymbol(), MODE_POINT);  
 ... ... ...  
//+------------------------------------------------------------------+
//| Возвращает профит позиции в пунктах                              |
//+------------------------------------------------------------------+
int ProfitPosition() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double pr=0;
 
  if (OrderType()==OP_BUY) {
    pBid=MarketInfo(OrderSymbol(), MODE_BID);
    pr=(pBid-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
    pr=(OrderOpenPrice()-pAsk)/pp;
  }
  return(MathRound(pr));
}
 
//+------------------------------------------------------------------+
//| Возвращает StopLoss позиции в пунктах                            |
//+------------------------------------------------------------------+
int StopLossInPoint() {
  double pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double sp=0;
 
  if (OrderType()==OP_BUY) {
    sp=(OrderStopLoss()-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    sp=(OrderOpenPrice()-OrderStopLoss())/pp;
  }
  if (OrderStopLoss()==0) sp=-OrderOpenPrice()/pp;
  return(MathRound(sp));
}
//+------------------------------------------------------------------+

Puedes ver que está un poco borroso con todos los diferentes

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);

¡y eso en casi todas las operaciones!

¡Pero sólo he cambiado el símbolo (he especificado el par) y el mago al principio! He puesto en marcha el Asesor Experto en línea en el marco de tiempo de 1 minuto. He esperado a obtener beneficios y a detener el movimiento del precio en este par. Todo parece funcionar bien. Estoy de acuerdo con el algoritmo de esta biblioteca.

Pero aún no he obtenido beneficios en otros dos pares (con mis propias redes de arrastre).

Lo veré mañana por internet.

 
rid:

Esta es la biblioteca de salida de tres niveles de Kim. Ahora he entrado en el código. En lugar de un símbolo en todas partes pongo el nombre de la pareja y en lugar de un magik pongo el magik de mi pareja.

...

Puedes ver que está un poco borroso con todos los diferentes

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
La biblioteca está escrita de forma competente - no hay ninguna vinculación con la herramienta de gráficos.
Por lo tanto, puede utilizarse sin modificaciones.
 

Gracias de nuevo, komposter, por tus respuestas.

Ahora esperé en línea las ganancias en los tres pares de mi Asesor Experto. Parece que cada par funciona según su modo de arrastre. ¡Incluyendo el par con la llamada de la biblioteca!

 
komposter:
rid:

Esta es la biblioteca de salida de tres niveles de Kim. Ahora he entrado en el código. En lugar de un símbolo en todas partes pongo el nombre de la pareja y en lugar de un magik pongo el magik de mi pareja.

...

Puedes ver que está un poco borroso con todos los diferentes

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
La biblioteca está escrita de forma competente - no hay ningún vínculo con la herramienta de gráficos.
Por lo tanto, puede utilizarse sin modificaciones.

Voy a lanzar mi propia versión... código de corte:


extern int    MagicNum = 400400, Stop = 33;
extern double Lot1 = 0.3;
int LotStop [8] = {28,33,43,33,33,33,33,33}; //можно юзать просто Stop
 
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
{ 
 int i, SymPermitted = 3;
 string Symbols[8] = {"EURUSD","GBPUSD","USDJPY","EURJPY","USDCHF","Reserved","Reserved","Reserved"};
 
  // Ma defence
  if (Bars<100)
    return(0);  
  
  for (i=0; i < SymPermitted; i++)
  {
    // Compile/reload/crash config defence
    if      (Symbols[i] == "EURUSD") { Stop = 28; Lot1 = 0.6; }
    else if (Symbols[i] == "GBPUSD") { Stop = 33; Lot1 = 0.2; }
    else if (Symbols[i] == "USDJPY") { Stop = 43; Lot1 = 0.6; }
    Sleep (1000); // Просто так
    Checking (Symbols[i], i);
  }
  return (0);
}
 
void Checking (string Sym, int LotStopIndex)
{
 int Total, LotStop = LotStop[LotStopIndex], i, j, Tic = 0;
 double VPoint, VAsk, VBid;
 
   Total = OrdersTotal();
 
   // Check opened
   for (i=0; i<Total; i++)
   {
     if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true)
     {  
       if (OrderSymbol() == Sym && OrderMagicNumber() == MagicNum)
         return (0);
     }
   }
   
   VPoint = MarketInfo(Sym, MODE_POINT);
   //... кучка кода расчётов
   Total = HistoryTotal();
   
   if (Total == 0)
   { // Reset to default
     LotSize = Lot1;
     LotStop[LotStopIndex] = Stop;
   }
   
   for (i=0; i<Total; i++)
   {
     if (OrderSelect (Total-i-1, SELECT_BY_POS, MODE_HISTORY) == true)
     { 
       if (OrderSymbol() == Sym && OrderMagicNumber() == MagicNum)
       { // Was loss (Alpari иногда выбивает положительные лосы и отрицательные профиты... мистика
         if (((OrderProfit ()) < 0) || (OrderClosePrice() == OrderStopLoss()))
         { ..код
         }
           
         else
         { // Reset to default
           LotSize = Lot1;
           LotStop[LotStopIndex] = Stop;
         }
         break;
       }
     }
 
     else
     {
       Print("Ошибка <", GetLastError(), "> при выборе хистори - ордера");
       return (1);
     }
  }
 
  if(AccountFreeMarginCheck(Sym, OP_BUY, LotSize) <= 0) 
  {  return (0); }
 
  
  VAsk = MarketInfo (Sym, MODE_ASK);
  VBid = MarketInfo (Sym, MODE_BID);
  // bay|sell...
  
  if (условие 1)
    Tic = OrderSend (Sym, OP_BUY, LotSize, VAsk, 3, VAsk-LotStop[LotStopIndex]*VPoint, VAsk+LotStop*VPoint, "CMATest5m", MagicNum, 0, Lime);
    
  else if (условие 2)
    Tic = OrderSend (Sym, OP_SELL, LotSize, VBid, 3, VBid+LotStop[LotStopIndex]*VPoint, VBid-LotStop*VPoint, "CMATest5m", MagicNum, 0, Red);
  
  if (Tic <= 0)
  {
    Print("Ошибка <", GetLastError(), "> при запросе ордера");
    Sleep (60000); // Ждём минуту... рынок никуда не убежит :-)...
  }
}
 

VassaV, cuéntanos un poco más sobre lo que has publicado aquí y cómo utilizarlo.

¿Qué significa la expresión "cortar el código"?

¿Por qué no hay un comentario en la tercera línea? //¿Puedes usar...?

 
rid:

VassaV, cuéntanos un poco más sobre lo que has publicado aquí y cómo utilizarlo.

¿Qué significa la expresión "cortar el código"?

¿Por qué no hay un comentario en la tercera línea? //¿Puedes usar...?


Cortar significa cortar para que sólo quede la base. Cómo utilizarlo depende de ti, aquí sólo hay un ejemplo.

En consecuencia:

//... un montón de código de cálculo - aquí su propio código de procesamiento de señales/indicadores.

// ...código - aquí tenemos nuestro propio código para el tratamiento de las pérdidas

condición 1 - aquí tenemos nuestro propio código de condiciones de compra/venta

// ¿se puede usar...? - es un comentario, sólo se muestra de esta manera.

Esto significa que puede utilizar arrays para almacenar los parámetros de cada moneda o puede almacenar los parámetros en el código

(sección // Compilación/recarga/configuración de la colisión)

Razón de la queja: