Ajuda na codificação - página 778

 

Alguém poderia me mostrar como fazer este código mais curto? Como usar o ciclo para isso?

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);

Gostaria de algo assim, mas não sei como mudar os nomes das variáveis.

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

Alguém poderia me mostrar como fazer este código mais curto? Como usar o ciclo para isso?

Gostaria de algo assim, mas não sei como mudar os nomes das variáveis.

Você não pode inicializar uma matriz com uma lista de entradas, devido às limitações da MQL. (Somente expressões constantes como { 2, 5, 3.1 } servirão).

Mas como você precisa converter duplas em strings de qualquer maneira, você pode usar o StringFormat. O interessante sobre esta função é que ela aceita um número arbitrário de argumentos.

Com a ajuda do StringSplitit pode ser usado para criar um array na mosca:

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); 

Há muito tempo que estou tentando descobrir isso, preciso de ajuda.

Os valores do envelope não correspondem com rsiArray[0] ou a qualquer valor que vejo nos gráficos e não consigo entender por quê.


Alguma idéia?


Obrigado

EDIT: (fixo) ok, tudo o que eu precisava fazer era reiniciar o mt4 e o código funcionou bem.

 

Passei horas tentando conseguir que uma EA/utilidade funcionasse corretamente e fiz várias mudanças até que meu cérebro ficasse dormente. Em anexo está uma versão preliminar e vou melhorá-la quando ultrapassar o obstáculo do básico funcionando corretamente, que é soar um alarme quando uma ordem de compra/venda aberta é adicionada e um alarme diferente quando uma ordem de compra/venda aberta é fechada. Esta versão às vezes funciona e às vezes não é tão pouco confiável neste ponto.


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

 

Olá pessoal, sou novo. Quero fazer uma edição muito simples sobre este indicador

Como e onde eu simplesmente coloco na caixa de descrição da Linha Horizontal, a palavra Alerta_ ?

para que ela apareça automaticamente?

Aguardando sua resposta



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

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

 

Qualquer um pode me ajudar a codificar isto. Colocando o Rectângulo como um alto e baixo dos últimos 3 meses, como mostra o agradecimento

Arquivos anexados:
INDIxxx.jpg  243 kb
 

Alguém ajuda com o stoploss na cruz ma anterior



 

Hi,

Eu tenho uma idéia. Mas eu não sei muito o código mq4.

A alta anterior é menor do que a 2ª alta anterior, então compremordem pendente na alta anterior * 2% ou 1% e quando o preço na vela atual tocar essa ordem de compra.

A baixa anterior é maior que a 2ª baixa anterior, depois vender ordem pendente na baixa anterior * -2% ou -1% e quando o preço da vela atual tocar a ordem de venda.

Qualquer período. Sem alvo Sem stop loss. Sem stop loss como o oposto.

Agradecido a qualquer um, que possa fazer código mq4. Preciso de ajuda. Somente MT4.

 

Olá ...

Você pode fazer um Especialista para esta estratégia, por favor

Especialista em Reforço

Configurações :

1.Opção: Vender somente / Comprar somente

2.TP: 50

3.Sl: 00

4.Etapa: 150

5.Lote inicial: 0,1

6.Multiplicação: 1.2.4.8.16 ... ... ...

7.Total de pedidos: 100

8.Número mágico: 111111

O método de trabalho :

1- Abertura automática de uma posição no início pelo tamanho de lote especificado .

2- Mudança de Tp para todos os comércios em cada reforço .

De acordo com a seguinte equação: Tp para a última posição dupla nos cobre todos os prejuízos flutuantes + lucro da última posição .

3- Retorno ao lote inicial .

 
BANSINO Money Maker:

Olá ...

Você pode fazer um Especialista para esta estratégia, por favor

Especialista em Reforço

Configurações :

1. Opção: Vender somente / Comprar somente

2. TP: 50

3. Sl: 00

4. Etapa: 150

5. Lote inicial: 0,1

6. Multiplicação: 1.2.4.8.16... ... ...... ...

7. Total de pedidos: 100

8. Número mágico: 111111

O método de trabalho :

1- Abertura automática de uma posição no início pelo tamanho de lote especificado .

2- Mudança de Tp para todos os comércios em cada reforço .

De acordo com a seguinte equação: Tp para a última posição dupla nos cobre todos os prejuízos flutuantes + lucro da última posição .

3- Retorno ao lote inicial .

Colocá-lo como um trabalho na seção Freelance.

Razão: