Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1153

 
kalmyk87:

Olá! em metatrader4 a autorização mql5 não está funcionando para subscrever os sinais...o que fazer!


Escreva um pedido de servicedesk (no perfil à esquerda), com detalhes e screenshots.

 

As corujas devem arar em vários pares e, de preferência, duas corujas por tabela de compra separadamente dos próprios.

Como está, abre-se ao infinito


int _OrdensTotal=OrdensTotal();

para (int i=_OrdensTotal-1; i>=0; i--) {

se (OrderSelect(i,SELECT_BY_POS)) {

se (OrderMagicNumber() == Magic) {

se (OrderSymbol() == Symbol()) {

se (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(bilhete>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Imprimir("Pedido aberto : ",OrderOpenPrice());

}

senão

Imprimir("Abertura de erro Pedido de compra : ",GetLastError()));

retornar;

}

 

ajudar quem pode

 

Boa tarde a todos!

Eu sei que é possível implementar a saída de sinal no indicador:

a) Quando aparece na barra atual sem esperar que feche. Neste caso, após o fechamento do bar, o sinal pode ser cancelado;

b) Após o fechamento da barra na qual o sinal aparece.

Estou interessado na variante a). Como implementar o alerta em um indicador, sem esperar pelo fechamento da barra?

Tentei implementá-lo como uma escolha de parâmetros na linha 39 do código indicador, mas ele não funcionou. Como fazer isso corretamente?


deslocamento int externo = 0; // em que barra o sinal é considerado: 0 - na barra de corrente; 1 - na barra fechada


Eu ficaria muito grato pela ajuda!

Arquivos anexados:
 
Tornado:

Boa tarde a todos!

Eu sei que é possível implementar a saída de sinal no indicador:

a) Quando aparece na barra atual sem esperar que feche. Neste caso, após o fechamento do bar, o sinal pode ser cancelado;

b) Após o fechamento da barra em que o sinal aparece.

Estou interessado na variante a). Como implementar o alerta em um indicador, sem esperar pelo fechamento da barra?

Tentei implementá-lo como uma escolha de parâmetros na linha 39 do código indicador, mas ele não funcionou. Como fazer isso corretamente?


deslocamento int externo = 0; // em que barra o sinal é considerado: 0 - na barra de corrente; 1 - na barra fechada


Eu ficaria muito grato por sua ajuda!


Eu consegui aproximadamente assim

//+---------------------------------------------------------------------------------+
//+ 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);
  }
//+------------------------------------------------------------------+

Eu removi algumas coisas desnecessárias. Eu simplifiquei algumas coisas

 
Victor Nikolaev:

Isto é mais ou menos o que eu tenho.

Eu removi algumas coisas desnecessárias. Simplificou algumas coisas.


Muito obrigado. Vou tentar.

 
Victor Nikolaev:

Isto é mais ou menos o que eu tenho.

Eu removi algumas coisas desnecessárias. Simplificou algumas coisas.


É uma infelicidade, mas não funciona. Tentei no prazo M5 para verificá-lo mais rapidamente. O sinal só apareceu quando a barra foi fechada e não quando as médias foram cruzadas na barra atual. Testes em armações 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);
  }
//+------------------------------------------------------------------+

Se descomentarmos as linhas restantes no OnStart() obtemos "newObjArray - conversão de parâmetros não permitida".

Duas perguntas: por que, e como consertá-lo?

 
Tornado:

É uma infelicidade, mas não funciona. Tentei no prazo M5 para verificar mais rapidamente. O sinal só apareceu depois que a barra foi fechada e não quando as médias foram cruzadas na barra atual. Testei-o em grandes períodos de tempo.


Parece que nós simplesmente não nos entendemos.

 

Olá amigos.

Como fazer com que os valores de stop loss, tekprofit e trailing sejam exibidos como uma porcentagem ao invés de pips.

Esta fórmula é muito desordenada e não funciona em absoluto

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

Eu gostaria de ter a forma mais simples de porcentagem.

Duplo Stoploss = 0,05;

--------

Lucro=Bid-Stoploss em porcentagem (é um exemplo sujo, mas apenas para maior clareza)

Obrigado.

Razão: