Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 23
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Estou completamente confuso.
double blevel=OrderStopLoss()<Bid-Point*TS; funciona para mim. SL vai atrás do preço somente em lucro.
double slevel=OrderStopLoss()>Ask+Point*TS; eu não sei como adicionar este a outro
Não é um bool.
Não é um bool, mas é chamado de conversão implícita
O que você está fazendo afinal? Arrasto?
Não é um bool, mas é chamado de conversão implícita
O que você está fazendo afinal? Arrasto?
Sim tentou fazer uma rede de arrasto. o roteiro original foi apenas para fechar quando o lucro do pedido foi alcançado
Sim, eu tentei fazer uma rede de arrasto. o scrip original era apenas para fechá-la quando ela alcançava lucro em um pedido
Lógica:
Se o lucro do pedido atual selecionado no laço for maior que o valor definido, se seu prejuízo for menor (para Comprar)/mais (para Vender) do que o nível de arrasto de prejuízo calculado, então mude a parada para o novo valor.
Isto é em poucas palavras.
Não foi isso que eu sugeri?
Sim, bem... Eu olhei para seu código de forma tão desatenta, que é melhor dizer que não olhei nada. Mas isso é a metade do problema, então eu disse tal porcaria de que quase me envergonho. Por alguma razão, de repente tive esta idéia maluca de que o ArrayMaximum() poderia ser aplicado a uma série de estruturas ou mesmo a um campo separado desta série.
Arrependo-me, não aconselho mais ninguém a pensar assim, não funciona...:)
Sim, bem... Eu olhei para seu código de forma tão desatenta, que é melhor dizer que não olhei nada. Mas isso é a metade do problema, então eu disse tal porcaria de que quase me envergonho. Por alguma razão, de repente tive esta idéia maluca de que o ArrayMaximum() poderia ser aplicado a uma série de estruturas ou mesmo a um campo separado desta série.
Arrependo-me, não aconselho mais ninguém a pensar assim, não funciona...:)
Bem... E eu? Olhei seu código da mesma forma e lhe agradeci - foi realmente mais curto...
Em resumo - ambos valem uma piada...
Não um roteiro, um Expert Advisor. Você está confundindo os tipos de programas. O script é executado uma vez após ser carregado na tabela e depois apagado. Se não estiver em loop. Dificilmente alguém vai fazer um roteiro em loop para fechar posições.
de acordo com o autor:
Aqui está um script MT4 close.mq4 padrão ligeiramente modificadoColocar o arquivo na pasta MetaTrader (Scripts) dos especialistas em MetaTrader,
Bem... E eu? quando olhei para o seu código, eu me curvei em agradecimento - é realmente mais curto...
Em resumo - ambos valem uma piada...
Não, eu não concordo. Este código
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
testado e funciona. Existem matrizes duplas simples definidas pelo usuário, e CopyRates() preenche uma variedade de estruturas e, portanto, você não pode escolher o máximo e o mínimo usando funções de trabalho com matrizes.
de acordo com o autor:
Aqui está um script MT4 close.mq4 padrão ligeiramente modificadoColocar o arquivo na pasta MetaTrader (Scripts),
Assim, seu roteiro funciona apenas uma vez - coloquei-o no gráfico, o roteiro funcionou(posições fechadas) e descarregou.
Você não precisa de um roteiro, você precisa de um EA.
Não, eu discordo. Este código
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
é testado e funciona. Aqui estão as simples matrizes duplas personalizadas, e CopyRates() preenche uma matriz de estruturas e, portanto, você não pode selecionar máximo e mínimo usando funções de matriz.
Bem, estou lhe dizendo - eu estava observando seu código com super atenção também. Então - a piada é sobre mim.
SZY... Mas meu código retorna quatro valores: alto/baixo/alto/baixo, o seu retorna apenas alto e baixo, e meu código verifica o sucesso da cópia de dados (embora não todos), o seu não...
É assim que meu código verifica a cópia completa dos dados necessários:
//| sFindRangeByCandlesBody.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Begin=1; // Бар начала диапазона поиска
input int RangeBars=20; // Диапазон поиска
//---
int bars=Bars(Symbol(),PERIOD_CURRENT);
int begin=(Begin<0?0:Begin>bars-3?bars-3:Begin);
int rangeBars=(RangeBars<2?2:
RangeBars>bars-begin?bars-begin:
RangeBars); // Диапазон поиска
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
MqlRates array[];
double high=0, low=0;
int highest=-1, lowest=-1;
if(CopyRates(Symbol(),PERIOD_CURRENT,begin,rangeBars,array)==rangeBars) {
ArraySetAsSeries(array,true);
high=GetHighestValue(begin,array,highest);
low=GetLowestValue(begin,array,lowest);
}
Print("High=",DoubleToString(high,Digits()),", Highest=",highest,", Low=",DoubleToString(low,Digits()),", Lowest=",lowest);
}
//+------------------------------------------------------------------+
double GetHighestValue(int bar_begin, MqlRates &array[], int &bar_highest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double high=DBL_MIN;
bar_highest=-1;
for(int i=0; i<sz; i++) {
double value=fmax(array[i].open,array[i].close);
if(value>high) {
high=value;
bar_highest=bar_begin+i;
}
}
return(high);
}
//+------------------------------------------------------------------+
double GetLowestValue(int bar_begin, MqlRates &array[], int &bar_lowest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double low=DBL_MAX;
bar_lowest=-1;
for(int i=0; i<sz; i++) {
double value=fmin(array[i].open,array[i].close);
if(value<low) {
low=value;
bar_lowest=bar_begin+i;
}
}
return(low);
}
//+------------------------------------------------------------------+