[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 163

 
polsvv ,para eso está la magia.
 
vnn:

Hola a todos...

¿Podría decirme cómo construir la ruta de acceso a los archivos del historial de MetaTrader 4? ¿Como "c:archivos de programametatrader 4historiaalpari-clásico"?

https://docs.mql4.com/ru/files/FileOpenHistory
 

Muchas gracias, sergeev, creo que lo he encontrado...

Print("Terminal path: ", TerminalPath() + "\\history\\" + AccountServer() + "\\");

Esta línea da salida a la ruta correcta aunque el editor se equivoque en los colores... Probablemente deberías escribir el código en el bloc de notas. Es una broma.

 

Buenas noches a todos.

En el tutorial de Sergey Kovalev encontré un experto - trailing stop. Lo copié en MetaEditor, lo compilé, pero el programa no funciona. Por favor, indíqueme cuál es el motivo. Quizá esté haciendo algo mal.

 

¿está escrito en mql?)

sólo dame el código.

 
Chicos, explicadme cómo usar iCustom
Estoy escribiendo
double BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",1,0);
double BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0);
No puedo hacerlo bien...
Tengo una tarea para obtener señales del indicador Bands upper y lower line...... Exactamente Bandas.....
 
//-------------------------------------------------------------------- // modifystoploss.mq4 // Diseñado para ser usado como ejemplo en el tutorial de MQL4. //-------------------------------------------------------------------- extern int Tral_Stop=10; // Dist. pursuit //--------------------------------------------------------------- 1 -- int start() // Función especial start { string Symb=Symbol(); // Fin. ¡tool //--------------------------------------------------------------- 2 -- for(int i=1; i<=OrdersTotal(); i++) // Bucle de pedido { if (OrderSelect(i-1,SELECT_BY_POS)==true) // Si hay un siguiente { // Análisis del pedido: int Tip=OrderType(); // Tipo de pedido if(OrderSymbol()!=Symb||Tip>1)continue;// No es nuestra orden double SL=OrderStopLoss(); // SL de la orden seleccionada //------------------------------------------------------ 3 -- while(true) // Bucle de modificación { double TS=Tral_Stop; // Valor inicial int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Distancia mínima. if (TS<Min_Dist) // Si hay menos del valor permitido para la orden, entonces la orden se ejecutará.
               TS=Min_Dist; // Nuevo valor de TS //--------------------------------------------------- 4 -- bool Modify=false; // No se asigna a modificar switch(Tip) // Por tipo de orden { case 0 : // Orden de compra if (NormalizeDouble(SL,Digits)< // Si se desea menor.
                     NormalizeDouble(Bid-TS*Point,Digits)) { SL=Bid-TS*Point; // entonces modifícalo cadena Text="Buy "; // texto para Buy Modify=true; // asignado para modificar } break; // salir si caso 1 : // Orden de venta si (NormalizeDouble(SL,Digits)> // si se pide arriba.
                     NormalizeDouble(Ask+TS*Point,Digits)|| NormalizeDouble(SL,Digits)==0)/o igual a cero { SL=Ask+TS*Point; // entonces modifíquelo Text="Sell "; // Modify=true; // asignado para modificar } } // End switch if (Modify==false) // si no se modifica break; // exit while //--------------------------------------------------- 5 -- double TP =OrderTakeProfit(); // TP de la orden seleccionada.
            double Price =OrderOpenPrice(); // Precio de la orden seleccionada. int Ticket=OrderTicket(); // Número de la orden seleccionada. Alert ("Modificar ",Text,Ticket,". Esperando respuesta..."); bool Ans=OrderModify(Ticket,Price,SL,TP,0);/¡Modificarlo!
            //--------------------------------------------------- 6 -- if (Ans==true) // Ha funcionado :) { Alert ("Pedido ",Text,Ticket," modificado:)"); break; // Desde el bucle modificar.
              } //--------------------------------------------------- 7 -- int Error=GetLastError(); // Ha fallado :( switch(Error) // Supera los errores { case 130:Alert("Paradas erróneas. Inténtelo de nuevo."); RefreshRates(); // Refresca los datos continue; // En la siguiente iteración case 136:Alert("No hay precio. Esperando un nuevo tick..."); while(RefreshRates()==false) // Hasta el nuevo tick Sleep(1); // Retraso en el bucle continue; // Siguiente iteración case 146:Alert("El subsistema de negociación está ocupado.Inténtelo de nuevo"); Sleep(500); // Solución sencilla RefreshRates(); // Actualizar datos continue; // Siguiente iteración // Errores críticos case 2 : Alert("Error general."); break; // Exit switch case 5 : Alert("Versión antigua del terminal cliente."); break; // Exit switch case 64 : Alert("Cuenta bloqueada."); break; // Salir switch case 133:Alert("Trading prohibited"); break; // Salir switch default: Alert("Error ",Error);//Error } break; // Fin del bucle de modificación } // Fin del bucle de modificación //------------------------------------------------------ 8 -- } // Fin del análisis de la orden //--------------------------------------------------------------- 9 -- return; // Salir start() } //-------------------------------------------------------------- 10 --
 
VOLDEMAR:
Chicos, explicadme cómo usar iCustom
Escribo
double BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",1,0);
double BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0);
No consigo que funcione...
Tengo una tarea para obtener señales del indicador Bands upper y lower line...... Exactamente Bandas.....
https://docs.mql4.com/ru/indicators/iBands
 
FelixFX:

Buenas noches a todos.

En el tutorial de Sergey Kovalev encontré un experto - trailing stop. Lo copié en MetaEditor, lo compilé, pero el programa no funciona. Por favor, indíqueme cuál es el motivo. Quizá esté haciendo algo mal.


Usa esto:

En las variables de usuario escribimos:

extern string   с9="------ Трейлингстоп ------";
extern int      TrailingStop=20; //Трейлинг-Стоп рыночного ордера. Если = 0 или то тарла нет
extern int      TrailingStep=5; //Шаг трала рыночного ордера
extern bool     WaitProfit = true; // Если true, то ждать профит = значению TrailingStop и только потом начинать тралить
                                    //Иначе, трейлинговать не дожидаясь положительного профита

extern string   с10=" -------- Прочие параметры -------------";
extern int      MAGIC=123456;//У ордеров открытых вручную MAGIC=0
extern int      Proskalz=10;//Проскальзывание

En EA Start escribe:

// ----------------------------- Тралим ордера ------------------------------------
TrailingRyn_b(TrailingStop,TrailingStep,Proskalz,MAGIC,WaitProfit,false);

Después de iniciar en los subprogramas personalizados escribir:

// =================================================================================================
// ************************* Трейлинг рыночных ордеров *********************************************
// =================================================================================================


// =================  TrailingRyn() =============================================================
// функция осуществляет трейлинг рыночных ордеров 
// ----------------------------------------------
void TrailingRyn_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, int MAGIC, bool WaitProfit,  bool UseTrailingSound) {
  string SMB=Symbol(); 
  int i;
  int MinLevel=MarketInfo(SMB,MODE_STOPLEVEL);//Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах   
  int SchBuy=SchBuy(MAGIC);
  int SchSell=SchSell(MAGIC);
  if(ryn_TrStop>=MinLevel && ryn_TrStep>0 && (SchBuy>0 || SchSell>0)){    
    for (i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {WriteError(i);}
      else {
        if (OrderSymbol()==SMB && OrderMagicNumber()==MAGIC){
          TrailingPositions_b(ryn_TrStop,ryn_TrStep,Proskalz,WaitProfit,UseTrailingSound);
        }
      }
    }
  }
 if(ryn_TrStop>=MinLevel && ryn_TrStep==0)
 Alert("Трейлинг невозможен - ryn_TrStep==0");
} 
// =================================================================================================

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, bool WaitProfit, bool UseTrailingSound){
  if(OrderType()==OP_BUY){
    if(!WaitProfit || (Bid-OrderOpenPrice())>ryn_TrStop*Point){
      if (OrderStopLoss()<Bid-(ryn_TrStop+ryn_TrStep-1)*Point){
        ModifyStopLoss_b(Bid-ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
  if(OrderType()==OP_SELL){
    if(!WaitProfit || OrderOpenPrice()-Ask>ryn_TrStop*Point) {
      if(OrderStopLoss()>Ask+(ryn_TrStop+ryn_TrStep-1)*Point || OrderStopLoss()==0){
        ModifyStopLoss_b(Ask+ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss_b(double ldStopLoss, bool UseTrailingSound){
  bool fm=false;
  string NameTrallingSound  = "ok.wav";// Наименование звукового файла для трейлинга
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if(fm!=0 && fm!=-1){
    if(UseTrailingSound) { PlaySound(NameTrallingSound);}
  }   
  if(fm==0 || fm==-1) { ModifError();}
}
//+------------------------------------------------------------------+

Funciones como ModifError() son mis funciones personalizadas - sólo muestran un mensaje de error. Escribe tus propios mensajes en su lugar.

 
Gracias .... Si me hubiera ayudado no estaría haciendo esta pregunta .............
Razón de la queja: