Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 982

 
 int x=0;
 int scale_mas[13]={0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096};//объявление массива

 for(int i=0;i < ArraySize(scale_mas);i++){
    if(x == scale_mas[0])x = scale_mas[1];                       //если х=индекс0, то х=индекс1
    if(x >= ArraySize(scale_mas))x = scale_mas[11];              //если х>= размер массива, то х=индекс11
    i=x;
    if(ObjectGetInteger(0, "Button+", OBJPROP_STATE) == false){  //если кнопка "+" нажата
       i=i+1;                                                    //увеличиваем индекс на 1
       ObjectSetInteger(0, "Button+", OBJPROP_STATE,true);}
                        
    x=i;							 //присваиваем х значение последнего индекса
    if(ObjectGetInteger(0, "Button-", OBJPROP_STATE) == false){  //если кнопка "-" нажата
       i=i-1;                                                    //уменьшаем индекс на 1
    ObjectSetInteger(0, "Button-", OBJPROP_STATE,true);}
                            
    x=i;                                                         //присваиваем х значение последнего индекса
 ObjectSetString(0,"=TrendLine",OBJPROP_TEXT,scale_mas[x]);}}    //выводим результат scale_mas[x]
Ontem eu escrevi o código, parece funcionar como deveria, mas somente quando eu chego ao valor máximo do array com o botão mais, ele reinicia para o início do array e se move para cima do array novamente. O que posso adicionar ou corrigir no código, para que quando ele atingir o valor superior da matriz, mais cliques no botão mais parem no índice superior e ele não seja reinicializado para a parte inferior da matriz? Ou o código pode ser simplificado de alguma outra forma para implementar esta idéia de clique de botão?
 
Ivan Revedzhuk:
Ontem eu escrevi o código, parece funcionar como deveria, mas somente quando eu chego ao valor máximo do array com o botão mais, ele reinicia para o início do array e se move para cima do array novamente. O que posso adicionar ou corrigir no código, para que quando ele atingir o valor superior da matriz, mais cliques no botão mais parem no índice superior e ele não seja reinicializado para a parte inferior da matriz? Ou o código pode ser simplificado de alguma outra forma para implementar esta idéia de clique de botão?
if(x >= ArraySize(scale_mas))
 ArraySize(scale_mas)-1;              //если х>= размер массива, то ....

Provavelmente, sim.

 
Alexey Viktorov:

Acho que sim.

Tentei isso também, funciona da mesma forma

 
Ivan Revedzhuk:

Tentei isso também, funciona da mesma forma

Eu não percebi imediatamente, para que serve o ciclo?

 
Alexey Viktorov:

Eu não percebi imediatamente, mas para que serve o loop?

Há alguma maneira de fazê-lo sem ele? Só não sei o que é melhor e só estou fazendo o que acho lógico.

 
Ivan Revedzhuk:

Há alguma maneira de fazê-lo sem ele? Eu simplesmente não sei o que é melhor e faço o que penso ser lógico.

Bem, a lógica deve ser diferente. Ao pressionar o botão + aumenta o índice da matriz. Atingiu o máximo, não aumenta, mas permanece no máximo. Pressionado o botão - o índice diminuiu. Atingiu zero, não reage à pressão, permanece no índice 0.

Ou havia alguma outra idéia?

PS; E quem afixou o exemplo de trabalhar com bandeiras, em resposta a esta pergunta e a eliminou? Por que você o apagou? Afinal de contas, é uma solução muito boa para o homem. Por que ele precisaria de um conjunto limitado???
 
Alexey Viktorov:

Bem, a lógica deve ser diferente. Pressionando o botão + aumenta o índice da matriz. Atingiu o máximo, não aumenta, mas se mantém no máximo. Pressionado o botão - o índice diminuiu. Atingiu zero, não responde, permanece no índice 0.

Ou havia alguma outra idéia?

PS; E quem afixou o exemplo de trabalhar com bandeiras, em resposta a esta pergunta e a eliminou? Por que você o apagou? Afinal de contas, é uma solução muito boa para o homem. Por que ele precisaria de um conjunto limitado???

Não, essa era exatamente a idéia. Eu realmente não sei como fazê-lo corretamente, por isso o fiz da maneira que o consegui. Mas notei que quando o loop está rodando no programa, desde que eu não clique nos botões do gráfico, todo o resto não funciona. É como se tudo estivesse pausado. Não entendo porque isso acontece, se houver variantes para implementar a idéia de forma diferente, eu apreciaria...

 

É isso aí. O problema é resolvido) sem matrizes e outras coisas. Acabou por ser muito mais simples))))

Surgiu a segunda pergunta. Como posso definir o nível de acionamento do Alerta no código com a seta de ajuste que aparece quando o Alerta é definido através do menu contextual com o mouse?

Pergunta sobre Alerta

 

Por favor, ajude, plz, é possível adicionar uma função a esta EA, para que a EA definida na janela EURUSD abra um acordo com os mesmos parâmetros, ao mesmo tempo, mas para GBPUSD, e EURUSD não se abrirá.

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

//| Desenvolvedor: Minaev Andrey |

//| Conselheiro especialista: Stochastic.mq4 |

|| Website: safe-forex.|| Website: safe-forex. |

//| Correio:minaev.work@mail.ru |

//| Skype: ao vivo:minaev.trabalho |

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

#direitos de propriedade intelectual "Safe-Forex.ru

#link da propriedade "https://safe-forex.ru"

#propriedade rigorosa


bool exterior Uso_Símbolo1 = verdadeiro;

fio externo Símbolo1 = "USDJPY";


configurações da cadeia de entrada = ""; // Configurações do Expert Advisor

input int magic = 111; // input magic

volume de entradaVolume fixo duplo = 0,01; // Volume

input int takeProfit = 500; // Lucro

input int stopLoss = 500; //Loss

input int buyLevel = 100; // input int buy Level

input int sellLevel = 0; // 75 Nível de venda


período externo int ADXp = 15; // período ADX 15

ADXLevel int externo =1;


período externo int MAperiod =360; //MA period 80

período MA2 =360; //MA período 80



StochSettings = ""; // Configurações do indicador do oscilador estocástico

input int stochPeriodK = 5; //período %K

input int stochPeriodoD = 3; //periodo %D

input int stochSlowing = 3; // Abrandamento

entrada ENUM_STO_PRICE stochPrice = STO_LOWHIGH; // Preço

entrada ENUM_MA_METHOD stochMethod = MODE_SMA; // Método


data/hora newCandle; // vela nova na tabela atual

bool allowOpenBuy; // permissão para abrir posição de compra

allowOpenSell; // permissão para abrir posição de Sell

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

int OnInit(nulo)

{

retornar INIT_SUCCEED;

}

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

nulo OnDeinit(const int razão)

{

}

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

nulo OnTick(nulo)

{

if(newCandle!=Time[0]) CheckSignalExist(); newCandle=Time[0];

if(allowOpenBuy) OpenPosition(OP_BUY);

if(allowOpenSell) OpenPosition(OP_SELL);

}

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

//| Função abre posição a preço atual |

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

vazio OpenPosition(tipo int)

{


preço duplo = 0,0;

if(type===OP_BUY) price=Ask;

if(type===OP_SELL) price=Bid;

int ticket=OrderSend(_Symbol,type,fixVolume,price,0,0,",magic,0);

// int ticket=OrderSend(,type,fixVolume,preço,0,0,0,",magic,0);

Sleep(1000);

if(bilhete>0)

{

if(type===OP_BUY)

{

Imprimir ("Buy position opened, ticket: ",ticket);

allowOpenBuy=false;

// SetStopOrders(bilhete);

}

if(type===OP_SELL)

{

Imprimir("Vender posição aberta, ticket: ",ticket);

allowOpenSell=false;

// SetStopOrders(bilhete);

}

}

if(bilhete<0)

{

if(type===OP_BUY) Print("Buy position did not open, error: ",GetLastError()));

if(type===OP_SELL) Print("Sell position did not open, error: ",GetLastError()));

}

}

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

///| Parada dos conjuntos de funções |

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

//vite SetStopOrders(int ticket)

//{

// duplo stopLevel=MarketInfo(_Symbol,MODE_STOPLEVEL),

// spread =MarketInfo(_Symbol,MODE_SPREAD),

// tp =takeProfit,

// sl =stopLoss;

// stopLevel+=spread;

// if(tp<stopLevel)

// {

// tp=stopLevel;

// Imprimir ("Distância mínima para o conjunto de lucros");

// }

// if(sl<stopLevel)

// {

// sl=stopLevel;

// Imprimir ("Distância mínima para o conjunto de perdas");

// }

// if(OrderSelect(ticket,SELECT_BY_TICKET))

// {

// int type=OrderType();

// dupla opp =OrderOpenPrice();

// if(type===OP_BUY) {tp=opp+tp*_Point; sl=opp-sl*_Point;}

// if(type===OP_SELL) {tp=topp-tp*_Point; sl=opp+sl*_Point;}

// if(OrderModify(ticket,opp,sl,tp,0))

// {

// if(type===OP_BUY) Print("P&L levels set for Buy position, ticket: ",ticket);

// if(type===OP_SELL) Print("Os níveis de P&L para a posição Sell foram definidos, ticket: ",ticket);

// }

// senão {

// if(type===OP_BUY) Print("Os níveis de P&L para a posição Comprar não foram definidos, ticket: ",ticket," erro: ",GetLastError()));

// if(type===OP_SELL) Print("Os níveis de P&L para a posição Sell não foram definidos; ticket: ",ticket," erro: ",GetLastError();

// }

// }

//}

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

//| Verificações de função para presença de sinal |

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

CheckSignalExist(nulo)


{

duplo ADX1=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,1); ////////////////////////////

duplo ADX2=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,2);

duplo DPLUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_PLUSDI,1);

duplo DMINUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_MINUSDI,1);

duplo MA=iMA(Symbol(),Period(),MAperiod,0,MODE_SMA,0,1);

duplo MA_2=iMA(Symbol(),Period(),MAperiod_2,0,MODE_SMA,0,1);


//PERIOD_H1

linha principal dupla1=iStochastic(_Símbolo,PERÍODO_CURSO,stochPeriodK,stochPeriodD,stochSlowing,stochMétodo,stochPrice,MODE_MAIN,1),

mainLine2=iStochastic(_Símbolo,PERÍODO_CURSO,stochPeriodK,stochPeriodD,stochSlowing,stochMétodo,stochPrice,MODE_MAIN,2),

signLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,1),

signLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,2);

Comentário(" ", (Ask-Bid)/1,5," ",Bid-Close[1]," ", Ask-Close[1]);

// if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel

//& iClose(Symbol(),Period(),1)>MA& iClose(Symbol(),Period(),1)>MA_2 && signLine1<buyLevel && signLine2<buyLevel

if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel

//&Fechar[2]<MA&Fechar[2]<MA_2 && signLine1<buyLevel && signLine2<buyLevel

&&Fechar[10] > Fechar[1]-(Fechar[1]-Fechar[20])

&& Fechar[10]>Bid )

{

Imprimir ("Apareceu um sinal para abrir uma posição de compra");

if(GetPositionsNumber()==0)

{

// allowOpenSell=true;

{ allowOpenBuy=verdadeiro;

Sleep(1000);

Imprimir ("Permitido abrir posição de compra");

}

}

// if(mainLine1<signLine1 && mainLine2>signLine2 && mainLine1>sellLevel && ADX1>ADXLevel&&& mainLine2>sellLevel

//& iClose(Symbol(),Period(),1)<MA& iClose(Symbol(),Period(),1)<MA_2 && signLine1>sellLevel && signLine2>sellLevel

if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel

//&Fechar[2]>MA&Fechar[2]>MA_2 && signLine1<buyLevel && signLine2<buyLevel

&&Fechar[10] <Fechar[1]+(Fechar[20]-Fechar[1])

&& Close[10]<Ask )

{

Imprimir ("Apareceu um sinal para abrir uma posição de Venda");

if(GetPositionsNumber()==0)

{

// allowOpenBuy=verdadeiro;

allowOpenSell=true;

Sleep(1000);

Imprimir ("Permitido abrir posição de Venda");

}

}

}
















/////////////////////////////////////////



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

//| A função retorna o número de posições em aberto |

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







int GetPositionsNumber(void)

{

int número=0;

for(int i=0; i<OrdersTotal(); i++)

if(OrderSelect(i,SELECT_BY_POS))

if(OrderSymbol()==_Symbol && OrderMagicNumber()==magic)

número++;

número de retorno;

}

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

 
vvs1:

Ajuda, plz, é possível adicionar uma função a esta EA, de modo que a EA instalada na janela EURUSD abra uma negociação com os mesmos parâmetros de abertura, ao mesmo tempo, mas em GBPUSD, e não abra em EURUSD.

Desculpe-me, sua cabeça está bem? Você não só inseriu o código em um lugar errado, mas também deixou um grande número de linhas vazias.

Você não acha que deveria ter algum respeito por quem você está pedindo ajuda?