Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1153

 
kalmyk87:

Hola! No puedo autorizar mql5 en metatrader4 para suscribirme a las señales...que hacer!


Escribe una solicitud a servicedesk (en el perfil de la izquierda), con detalles y capturas de pantalla.

 

Los búhos deben arar en varias parejas y, preferiblemente, dos búhos por carta de compra por separado de los selfies.

Tal como está, se abre al infinito


int _OrdersTotal=OrdersTotal();

for (int i=_OrdersTotal-1; i>=0; i--) {

if (OrderSelect(i,SELECT_BY_POS)) {

if (OrderMagicNumber() == Magic) {

if (OrderSymbol() == Symbol()) {

if (OrderType() = OP_BUY) {

}}}}}

if(MaPrevious>MaPrevious1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point ,Ask+TakeProfit*Point, "macd sample",Magic,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Orden de compra abierta : ",OrderOpenPrice());

}

si no

Print("Error al abrir la orden de compra : ",GetLastError());

volver;

}

 

ayuda que puede

 

¡Buenas tardes a todos!

Sé que es posible implementar la salida de la señal en el indicador:

a) Cuando aparece en la barra actual sin esperar a que se cierre. En este caso, después del cierre de la barra la señal puede ser cancelada;

b) Tras el cierre de la barra en la que aparece la señal.

Me interesa la variante a). ¿Cómo implementar la alerta en un indicador, sin esperar al cierre de la barra?

Intenté implementarlo como una opción de parámetros en la línea 39 del código del indicador, pero no funcionó. ¿Cómo hacerlo correctamente?


extern int shift = 0; // en qué barra se considera la señal: 0 - en la barra actual; 1 - en la barra cerrada


¡Estaría muy agradecido por la ayuda!

Archivos adjuntos:
 
Tornado:

¡Buenas tardes a todos!

Sé que es posible implementar la salida de señales en el indicador:

a) Cuando aparece en la barra actual sin esperar a que se cierre. En este caso, después del cierre de la barra la señal puede ser cancelada;

b) Tras el cierre de la barra en la que aparece la señal.

Me interesa la variante a). ¿Cómo implementar la alerta en un indicador, sin esperar al cierre de la barra?

Intenté implementarlo como una elección de parámetros en la línea 39 del código del indicador, pero no funcionó. ¿Cómo hacerlo correctamente?


extern int shift = 0; // en qué barra se considera la señal: 0 - en la barra actual; 1 - en la barra cerrada


Le agradecería mucho su ayuda.


Lo tengo aproximadamente así

//+---------------------------------------------------------------------------------+
//+ MA2_Signal                                                                      +
//+ Индикатор сигналов при пересечении 2-х средних                                  +
//+                                                                                 +
//+ Внешние параметры:                                                              +
//+  ExtPeriodFastMA - период быстой средней                                        +
//+  ExtPeriodSlowMA - период медленной средней                                     +
//+  ExtModeFastMA   - режим быстой средней                                         +
//+  ExtModeSlowMA   - режим медленной средней                                      +
//+   Режимы: 0 = SMA, 1 = EMA, 2 = SMMA (сглаженная), 3 = LWMA (взвешенная)        +
//+  ExtPriceFastMA  - цена быстрой средней                                          +
//+  ExtPriceSlowMA  - цена медленной средней                                       +
//+   Цены: 0 = Close, 1 = Open, 2 = High, 3 = Low, 4 = HL/2, 5 = HLC/3, 6 = HLCC/4 +
//+---------------------------------------------------------------------------------+
#property copyright "Copyright © 2015, Karakurt (mod. GromoZeka 2017)"
#property link      ""

//---- Определение индикаторов
#property indicator_chart_window
#property indicator_buffers 4
//---- Цвета
#property  indicator_color1 Red // 5
#property  indicator_color2 Green        // 7
#property  indicator_color3 DeepSkyBlue
#property  indicator_color4 Magenta
#property  indicator_width1 2
#property  indicator_width2 2
#property  indicator_width3 2
#property  indicator_width4 2


//---- Параметры
extern int    ExtPeriodFastMA = 8;
extern int    ExtPeriodSlowMA = 20;
extern int    ExtModeFastMA   = 1; // 0 = SMA, 1 = EMA, 2 = SMMA, 3 = LWMA
extern int    ExtModeSlowMA   = 1; // 0 = SMA, 1 = EMA, 2 = SMMA, 3 = LWMA
extern int    ExtPriceFastMA  = 0; // 0 = Close, 1 = Open, 2 = High, 3 = Low, 4 = HL/2, 5 = HLC/3, 6 = HLCC/4
extern int    ExtPriceSlowMA  = 0; // 0 = Close, 1 = Open, 2 = High, 3 = Low, 4 = HL/2, 5 = HLC/3, 6 = HLCC/4
extern int shift=0;      // На каком баре считать сигнал: 0 - на текущем; 1 - на закрытом
extern bool   EnableAlert=true;
extern bool   EnableSendNotification=false;
extern bool   EnableSendMail  =  false;
extern bool   EnableSound     = false;
extern string ExtSoundFileNameUp = "Покупаем.wav";
extern string ExtSoundFileNameDn = "Продаем.wav";

//---- Буферы
double FastMA[];
double SlowMA[];
double CrossUp[];
double CrossDown[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- Установка параметров прорисовки
//     Средние
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
//     Сигналы
   SetIndexStyle(2,DRAW_ARROW,EMPTY);
   SetIndexArrow(2,233);
   SetIndexStyle(3,DRAW_ARROW,EMPTY);
   SetIndexArrow(3,234);

//---- Задание буферов
   SetIndexBuffer(0,FastMA);
   SetIndexBuffer(1,SlowMA);
   SetIndexBuffer(2,CrossUp);
   SetIndexBuffer(3,CrossDown);

   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

//---- Название и метки
   IndicatorShortName("MA2_SignalV2("+ExtPeriodFastMA+","+ExtPeriodSlowMA);
   SetIndexLabel(0,"MA("+ExtPeriodFastMA+","+ExtPeriodSlowMA+")"+ExtPeriodFastMA);
   SetIndexLabel(1,"MA("+ExtPeriodFastMA+","+ExtPeriodSlowMA+")"+ExtPeriodSlowMA);
   SetIndexLabel(2,"Buy");
   SetIndexLabel(3,"Sell");

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   double AvgRange;
   int    iLimit;
   int    i;
   int    counted_bars=IndicatorCounted();

//---- check for possible errors
   if(counted_bars<0)
      return ( -1 );

//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   iLimit=Bars-counted_bars;

   for(i=iLimit; i>=0; i--)
     {
      FastMA[i] = iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i );
      SlowMA[i] = iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i );
      AvgRange=(iMA(NULL,0,10,0,MODE_SMA,PRICE_HIGH,i)-iMA(NULL,0,10,0,MODE_SMA,PRICE_LOW,i))*0.1;
      CrossDown[i+1]=EMPTY_VALUE;
      CrossUp[i+1]=EMPTY_VALUE;

      if((FastMA[i+1]>=SlowMA[i+1]) && (FastMA[i+2]<=SlowMA[i+2]) && (FastMA[i]>SlowMA[i])) // пересечение вверх
        {//
         CrossUp[i+1]=SlowMA[i+1]-Range*0.75;
        }

      if((FastMA[i+1]<=SlowMA[i+1]) && (FastMA[i+2]>=SlowMA[i+2]) && (FastMA[i]<SlowMA[i])) // пересечение вниз
        {//
         CrossDown[i+1]=SlowMA[i+1]+Range*0.75;
        }
     }
   static datetime TimeAlert=0;
   if(TimeAlert!=Time[0])
     {
      TimeAlert=Time[0];
      if(CrossUp[shift]!=EMPTY_VALUE)
        {
         if(EnableAlert) Alert("MA 8-20 ",Symbol()," ",Period(),"M - BUY "); // звуковой сигнал
         if(EnableSound) PlaySound(ExtSoundFileNameUp);
         if(EnableSendNotification) SendNotification("MA 8-20 EUR_H1 - BUY"); // push-уведомление
         if(EnableSendMail) SendMail("MA 8-20: ",Symbol()+" , "+Period()+" мин.-  BUY!"); // email-уведомление
        }
      if(CrossDown[shift]!=EMPTY_VALUE)
        {
         if(EnableAlert) Alert("MA 8-20 ",Symbol()," ",Period(),"M - SELL "); // звуковой сигнал
         if(EnableSound) PlaySound(ExtSoundFileNameDn);
         if(EnableSendNotification) SendNotification("MA 8-20 EUR_H1 - SELL"); // push-уведомление
         if(EnableSendMail) SendMail("MA 8-20: ",Symbol()+" , "+Period()+" мин.- SELL!"); // email-уведомление
        }
     }
   return (0);
  }
//+------------------------------------------------------------------+

He eliminado algunas cosas innecesarias. He simplificado algunas cosas

 
Victor Nikolaev:

Esto es más o menos lo que tengo.

He eliminado algunas cosas innecesarias. Simplifiqué algunas cosas.


Muchas gracias. Lo intentaré.

 
Victor Nikolaev:

Esto es más o menos lo que tengo.

He eliminado algunas cosas innecesarias. Simplifiqué algunas cosas.


Es lamentable, pero no funciona. Lo he probado en el marco temporal M5 para comprobarlo más rápidamente. La señal sólo aparecía cuando se cerraba la barra y no cuando se cruzaban las medias en la barra actual. Pruebas en cuadros grandes.

 
//+------------------------------------------------------------------+
class A
  {
public: int       propA;
public:
                     A(void) {propA = 15;};
                    ~A(void) {};
  };
//+------------------------------------------------------------------+
class B: public A
  {
public:
                     B(void){};
                    ~B(void){};
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   B newObj;
   GetA(newObj);
//---
   //B newObjArray[3];
   //GetA_Array(newObjArray);
  }
//+------------------------------------------------------------------+
void GetA(A &obj)
  {
   Print(obj.propA);
  }
//+------------------------------------------------------------------+
void GetA_Array(A &obj[])
  {
   for(int i=0;i<ArraySize(obj);i++)
      Print(obj[i].propA);
  }
//+------------------------------------------------------------------+

Si descomentamos las líneas restantes en OnStart() obtenemos "newObjArray - parameter conversion not allowed".

Dos preguntas: ¿por qué y cómo solucionarlo?

 
Tornado:

Es lamentable, pero no funciona. Lo he probado en el marco temporal M5 para comprobarlo más rápido. La señal aparecía sólo después del cierre de la barra y no cuando se cruzaban las medias en la barra actual. Lo he probado en grandes marcos temporales.


Parece que no nos entendemos.

 

Hola amigos.

Cómo hacer que los valores de stop loss, tekprofit y trailing se muestren como porcentaje en lugar de pips.

Esta fórmula es demasiado recargada y no funciona en absoluto

StopLoss=NormalizeDouble(Bid-(Bid-TrailingStop)/100*TRAL_PERCENT,Digits);

Me gustaría tener la forma más simple de porcentaje.

Doble Stoploss = 0,05;

--------

Profit=Bid-Stoploss en porcentajes (es un ejemplo desordenado, pero sólo para que quede claro)

Gracias.

Razón de la queja: