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

 

Hola a todos.

Decidí convertirme en escritor. Quería escribir algo en MQL4. He leído algo al respecto y decidí escribir un Asesor Experto, que abriría la posición cuando el RSI con periodo 8 cruzara 70 y cerraría la posición cuando cruzara 30 y no pasaría nada más. Yo lo escribí, aquí está el código

//+------------------------------------------------------------------+
//|| 4doc.mq4 ||
//| Alex |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Alex"
#enlace de propiedad "http://www.metaquotes.net"

//---- parámetros de entrada
extern int PerRSI=8;
extern intNamber=77771;

extern double Lots=1.0;

/+------------------------------------------------------------------+
//| función de inicio experto |
//+------------------------------------------------------------------+
int inicio()
{
int
cnt=0,
billete,
total;
doble
rsi_0, //valor. rsi_0 actual
rsi_1; // Valor. rsi_1 1ª barra
si (Bares<100)
{
Print("barras menos de 100");
return(0);
}
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Barra actual
rsi_1=iRSI(NULL,0, PerRSI,0,1); // Barra actual más 1
total=Total de pedidos();
if(total<1)
if(rsi_0 < rsi_1 && rsi_0 > 70) // Si la línea ha cruzado el 70
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My RSI", MagicNamber,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Orden de venta abierta : ",OrderOpenPrice())
}
else Print("Error al abrir la orden de VENTA : ",GetLastError());
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
RefreshRates();
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // ¿se trata de una posición abierta? OP_BUY o OP_SELL
OrderSymbol()==Symbol()) // ¿coincidencia de la herramienta?
{
if(OrderType()==OP_SELL) // la posición está abierta
{
if(rsi_0 > rsi_1 && rsi_0 < 30) // Si la línea ha cruzado 30
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // cerrar posición
return(0); // salir

}}}}}

Lo he probado y funciona mayormente como quería. He decidido cambiar el código, para abrir una posición cuando SSI - 14 cruza el nivel 100, y para cerrar una posición cuando cruza el nivel 100. He cambiado el código RSI por CCI , aquí está.

//+------------------------------------------------------------------+
//| CCI-DOC.mq4 ||
//| Alex |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Alex"
#enlace de propiedad "http://www.metaquotes.net"

//---- parámetros de entrada
extern int PerCCI=14;
extern inttern MagicNamber=88881;

extern double Lots=1.0;

//+------------------------------------------------------------------+
//| función de inicio experto |
//+------------------------------------------------------------------+
int inicio()
{
int
cnt=0,
billete,
total;
doble
cci_0, // valor de cci_0. cci_0 corriente
cci_1; // valor de cci_1. cci_1 1ª barra
si (Bares<100)
{
Print("barras menos de 100");
return(0);
}
cci_0=iRSI(NULL,0, PerCCI,0,0); // Barra actual
cci_1=iRSI(NULL,0, PerCCI,0,1); // barra actual más 1
total=Total de pedidos();
if(total<1)
if(cci_0 < cci_1 && cci_0 > 100) // if(la línea ha cruzado el 100
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My CCI", MagicNamber,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Orden de venta abierta : ",OrderOpenPrice())
}
else Print("Error al abrir la orden de VENTA : ",GetLastError());
return(0);
}
for(cnt=0;cnt<total;cnt++)
{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // ¿se trata de una posición abierta? OP_BUY o OP_SELL
OrderSymbol()==Symbol()) // ¿coincidencia de la herramienta?
{
if(OrderType()==OP_SELL) // la posición está abierta
{
if(cci_0 > cci_1 && cci_0 < -100) // si la línea ha cruzado -100
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // cerrar posición
return(0); // salir
}}}}}

Comenzó a probar CCI ..... bien, no pasa nada, no vende ni compra, no hay errores en el registro, al final de la prueba se abre gráfico de la curva, pero no es CCI, pero RSI 70-30 con el período 14..... Quizá alguno de los escritores experimentados lo entienda y diga por qué y cómo solucionarlo.

 
pepsi писал(а) >>
A continuación, la demostración en el registro muestra todo con mayor claridad. Está más claro dónde buscar el error. Por mi cuenta...

>> gracias

 

¡¡¡¡¡¡¡Hola de nuevo!!!!!!!

Me gustaría /no molestar/;-)) recordarle su pregunta sobre p. 64 sobre las condiciones de negociación de MA... gracias de antemano (por una patada en los pantalones para un dummie)

 

Señores, ¿podrían decirme si utilizo varios gráficos temporales diferentes del mismo instrumento de negociación en el terminal?

¿Cómo se consume el tráfico en el programa? ¿Consume el tráfico de la franja horaria mínima, o el tráfico de todas las franjas horarias?

 
igrok2008 >> :

¡¡¡¡¡¡¡Hola de nuevo!!!!!!!

Me gustaría /no molestar/;-)) recordarle su pregunta sobre p. 64 sobre las condiciones de negociación de MA... gracias de antemano (por la patada en los pantalones a los tontos)

int start()
  {
//----
    double MA_0=iMA(NULL, 0, pMA, pSh, mode, price,0);
    double MA_1=iMA(NULL, 0, pMA, pSh, mode, price,1);

    перед использованием в коде open_1 или  open_0 их нужно инициализировать, т. е. объяснить программе
    к виду каких данных эти опены относятся( целые, дробные, строчные, логические)

    double open_0=Open[0]; //  double - дробное число. 0 и 1 это номера ячееек,
    double open_1=Open[1]; // которые в данном случае являются номерами баров
        
    if( MA_1< Open[1] && MA_0>Open[0])
     if( CheckOrders(OP_SELL))//продажа
      {
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
       
    if( MA_1>Open[1] && MA_0<Open[0])
     if( CheckOrders(OP_BUY))//покупка
      {
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }
 
KONDOR >> :

¡¡¡Gracias por la respuesta!!!

1. A ver si me aclaro, ¿hay que escribir las dos líneas con doble open_0 y doble_1 ANTES de las líneas con doble MA, o es que no es crítico ??????...

2. En las condiciones de negociación puede sustituir open[0,1] por open_0,1 ????????.....

 
igrok2008 >> :

¡¡¡Gracias por la respuesta!!!

1. A ver si me aclaro, ¿hay que escribir las dos líneas con doble open_0 y doble_1 ANTES de las líneas con doble MA, o es que no es crítico ??????...

2. Puede sustituir open[0,1] por open_0,1 ????????.....

1. No es crítico.

2. puede

 

Ayuda por favor... Puede que sea perezoso, pero no puedo averiguar cómo conectar el programa para operar en una cuenta demo o real... Por favor, explique qué escribir y dónde cantar, se lo ruego... gracias de antemano))

 
Escribí - Escribí, comercié en el probador, pero en la demo o real no quiere hacer transacciones, y en general no hay señales, aunque deberían estar allí(((
 
keekkenen >> :

1. no es crítico

2. puede

¡¡¡¡CGFCB<J es decir, GRACIAS!!!!

Razón de la queja: