Ayuda a la codificación - página 778

 

¿Podría alguien mostrarme cómo hacer este código más corto? ¿Cómo utilizar el ciclo for para esto?

extern double S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15;
if (S1==1234) S1=DoubleToString(S1);
if (S2==1234) S2=DoubleToString(S2);
if (S3==1234) S3=DoubleToString(S3);
if (S4==1234) S4=DoubleToString(S4);
if (S5==1234) S5=DoubleToString(S5);
if (S6==1234) S6=DoubleToString(S6);
if (S7==1234) S7=DoubleToString(S7);
if (S8==1234) S8=DoubleToString(S8);
if (S9==1234) S9=DoubleToString(S9);

Me gustaría algo como esto, pero no sé cómo cambiar los nombres de las variables.

for(i=1; i<=9; i++){
if (S+i==1234) S+i=DoubleToString(S+i);
}
 
Karel Nagel:

¿Podría alguien mostrarme cómo hacer este código más corto? ¿Cómo utilizar el ciclo for para esto?

Me gustaría algo como esto, pero no sé cómo cambiar los nombres de las variables.

No se puede inicializar un array con una lista de entradas, debido a las limitaciones de MQL. (Sólo las expresiones constantes como { 2, 5, 3.1 } servirán).

Pero como necesitas convertir dobles a cadenas de todos modos puedes usar StringFormat. Lo interesante de esta función es que acepta un número arbitrario de argumentos.

Con la ayuda de StringSplit se puede utilizar para crear un array sobre la marcha:

string line=StringFormat("%g %g %g %g %g %g %g %g %g",S1,S2,S3,S4,S5,S6,S7,S8,S9);
string numbers[];
int count=StringSplit(line,' ',numbers);
for(int i=0; i<count; i++)
  {
   if(numbers[i]=="1234") Print(" S",i+1," == 1234");
  }
 
rsiArray[0] = iRSI(NULL,0,10,PRICE_CLOSE,1);
rsiArray[1] = iRSI(NULL,0,10,PRICE_CLOSE,2);
rsiArray[2] = iRSI(NULL,0,10,PRICE_CLOSE,3);
rsiArray[3] = iRSI(NULL,0,10,PRICE_CLOSE,4);
rsiArray[4] = iRSI(NULL,0,10,PRICE_CLOSE,5);
ArraySetAsSeries(rsiArray, true); 

upperEnv = iEnvelopesOnArray(rsiArray, 0, 5,MODE_SMA, 0, 5, MODE_UPPER, 0);
lowerEnv = iEnvelopesOnArray(rsiArray, 0, 5,MODE_SMA, 0, 5, MODE_LOWER, 0); 

He estado tratando de averiguar esto por mucho tiempo, necesito ayuda.

Los valores de la envolvente no se corresponden con rsiArray[0] o con cualquier valor que veo en los gráficos y no puedo averiguar por qué.


¿Alguna idea?


Gracias

EDIT: (fijo) ok, todo lo que necesitaba hacer era reiniciar mt4 y el código funcionó bien.

 

He pasado horas intentando conseguir que un EA/utilidad funcione correctamente y he hecho varios cambios hasta que mi cerebro está adormecido. Adjunto una versión preliminar y la mejoraré una vez que supere el obstáculo de que lo básico funcione correctamente, que es hacer sonar una alarma cuando se añade una orden de compra/venta abierta y una alarma diferente cuando se cierra una orden de compra/venta abierta. Esta versión a veces funciona y a veces no, así que no es fiable en este punto.


//+------------------------------------------------------------------+
//|               myNotify.mq4                                       |
//|               Notify me by sound file of change in orders        |
//+------------------------------------------------------------------+

//---- input parameters
extern string OrderClosedWav = "OrderClosed.wav";
extern string OrderOpenedWav = "OrderOpened.wav";
string sVersion = "1.39";
int iOld, iNew = 0;
int i = 0;
uchar ii = 0;
long NewOrdersHash = 0;
long OldOrdersHash = 0;

int nOrders = 0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
// +------------------------------------------------------------------+
// |  expert deinitialization function                                |
// +------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

int start()
{ 
    nOrders = 0;
    NewOrdersHash = 0;

//First Pass
    for(i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)           // NOT "OP_BUYLIMIT" || "OP_BUYSTOP" //|| "OP_SELLLIMIT" || "OP_SELLSTOP")
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 

OldOrdersHash = NewOrdersHash;
iOld =nOrders;

    Comment ("Ver ",sVersion," \n",
         iOld,"\n", iNew,"\n\n", ii,"\n\n",
         OrderOpenedWav,"\n",
         OrderClosedWav,"\n\n",
         "Old:  ",OldOrdersHash,"\n",
         "New: ",NewOrdersHash,"\n\n",
         nOrders,"\n");
// Wait
         Sleep(2000);

//Second Pass to compare after short pause
    nOrders = 0;
    NewOrdersHash = 0;
    for(i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)           // NOT "OP_BUYLIMIT" || "OP_BUYSTOP" //|| "OP_SELLLIMIT" || "OP_SELLSTOP")
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 
iNew = nOrders;

    if (ii > 24) {ii = 1;} else {ii++;}
       
    Comment ("Ver ",sVersion," \n",
         iOld,"\n", iNew,"\n\n", ii,"\n\n",
         OrderOpenedWav,"\n",
         OrderClosedWav,"\n\n",
         "Old:  ",OldOrdersHash,"\n",
         "New: ",NewOrdersHash,"\n\n",
         nOrders,"\n");
    if (OldOrdersHash != NewOrdersHash)
    {
     if (iNew > iOld)
       PlaySound(OrderOpenedWav);
     else
       PlaySound(OrderClosedWav);
    }

return(0);

}  

/*
void OrdersF()
   {

    nOrders = 0;
    NewOrdersHash = 0;
    for(int i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)          
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 
    iNew = nOrders;
    return;
   }
*/
//+------------------------------------------------------------------+

 

Hola chicos, soy nuevo. Quiero hacer una edición muy simple en este indicador

¿Cómo y dónde puedo simplemente poner en el cuadro de Descripción de la Línea Horizontal, la palabra, Alerta_ ?

para que aparezca automáticamente?

Esperando su respuesta



//+------------------------------------------------------------------+

//|                                              horizontal line.mq4 |
//|                                                          Wdholic |
//|                            https://www.mql5.com/en/users/wdholic |
//+------------------------------------------------------------------+
#property copyright "Wdholic"
#property link      "https://www.mql5.com/en/users/wdholic"
#property version   "1.00"
#property strict

#import "cfunctions.dll" 
int      MT4_ScreenToClient(int hWnd, int& iX[]);  
#import
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  { 
    double pmax=ChartGetDouble(0,CHART_PRICE_MAX);
    double pmin=ChartGetDouble(0,CHART_PRICE_MIN);
    double Ymax=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)*1.0;
   //  Alert(pmin);Alert(pmax);Alert(Ymax);
   int iCoords[2] ;
    int hWin = WindowHandle( Symbol(), Period());  
   
    MT4_ScreenToClient(hWin, iCoords);    
               
    double cory=iCoords[1]*1.0;
    double range=(pmax-pmin);
    
    double XY= (cory*1.0)/Ymax;
      double P=pmax-XY*range;
     
        
   Line("test_",P,clrAqua);
   WindowRedraw();
   return;
  }
//+------------------------------------------------------------------+

void Line(string t,double P,color C )
{ int a=1;string nm;
    nm="line_"+t+string(a);
  while(ObjectFind(0,nm)==0){ a++; nm="line_"+t+string(a);}
  
if(ObjectFind(0,nm)<0){
  ObjectCreate(0,nm,OBJ_HLINE,0,0,0); 
  ObjectSet( nm,OBJPROP_COLOR,C);}
  ObjectSet( nm,OBJPROP_PRICE1,P);  
  ObjectSet( nm,OBJPROP_SELECTED,1);  
}

 

Puede alguien ayudarme a codificar esto. Poniendo Rectángulo como máximo y mínimo de los últimos 3 meses como se muestra gracias

Archivos adjuntos:
INDIxxx.jpg  243 kb
 

alguien ayuda con el stoploss en el cruce de ma anterior



 

Hola,

Tengo una idea. Pero no sé el código mq4 mucho.

El máximo anterior es más bajo que el segundo máximo anterior, entonces compre laorden pendiente al máximo anterior * 2% o 1% y cuando el precio en la vela actual toque esa orden, compre.

El mínimo anterior es más alto que el segundo mínimo anterior, entonces vender la orden pendiente al mínimo anterior * -2% o -1% y cuando el precio en la vela actual toque esa orden vender.

Cualquier periodo. Sin objetivo Sin stop loss. Trailing stop loss como el opuesto.

Agradecido a cualquier persona, que puede hacer mq4 código. Necesito ayuda. Sólo MT4.

 

Hola...

Puedes hacer un Experto para esta estrategia por favor

Experto en refuerzo

Configuración:

1.Opción: Sólo venta / Sólo compra

2.TP: 50

3. Sl: 00

4. Paso: 150

5.Lote inicial: 0,1

6.Multiplicación: 1.2.4.8.16... ...

7.Total de pedidos: 100

8.Número mágico: 111111

El método de trabajo:

1- Abrir una posición al inicio automáticamente por el tamaño de lote especificado .

2- Cambiar Tp para todas las operaciones en cada refuerzo .

Según la siguiente ecuación: Tp parala última posición doble nos cubre toda la pérdida flotante + el beneficio de la última posición .

3- Volveral lote inicial .

 
BANSINO Money Maker:

Hola ...

Puedes hacer un Experto para esta estrategia por favor

Experto en refuerzo

Configuración :

1. Opción: Sólo venta / Sólo compra

2. TP: 50

3. Sl: 00

4. Paso: 150

5. Lote inicial: 0, 1

6. Multiplicación: 1.2.4.8.16... ...

7. Total de pedidos: 100

8. Número mágico: 111111

El método de trabajo :

1- Abrir una posición al inicio automáticamente por el tamaño de lote especificado .

2- Cambiar Tp para todas las operaciones en cada refuerzo .

Según la siguiente ecuación: Tp parala última posición doble nos cubre toda la pérdida flotante + el beneficio de la última posición .

3- Volveral lote inicial .

Publícalo como trabajo en la sección de Freelance.

Razón de la queja: