[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 449
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Não, isso significa apenas que os dados correspondiam a um pedaço de história.
Você poderia ter entrado manualmente, por exemplo. Ou escrito a partir de um arquivo de texto. Ou você poderia tê-lo obtido de uma calculadora.
Porque mesmo inserindo alguns dados condicionais "1,25 1,16 1,73 1,35" podemos ter a história de alguma moeda há muitos anos. Mas isso não significa que criamos uma série de séries cronológicas
Afinou um pouco o roteiro original:
1. Copiei para a matriz personalizada apenas 5 últimos preços de abertura.
2. Calculou a matriz personalizada obtida por todos os 5 preços de abertura copiados.
Aqui está o que eu tenho:
Como você pode ver na figura, os preços abertos são indexados em ordem inversa (como evidenciado pelo NÚMERO de preços de barras abertas (vai em ordem crescente) e o TEMPO de preços de barras abertas (vai em ordem decrescente)), ou seja, o array é organizado como uma série de arrays timeseries.
Mas a função ArrayGetAsSeries retorna no entanto 0 (falso), o que significa: a matriz do usuário NÃO é organizada como uma array-timeseries.
Muito gentilmente, peça clareza
Pergunta: como explicar isto?
P.S. Obrigado por responder às minhas perguntas
Afinou um pouco o roteiro original:
1. Copiei apenas os últimos 5 preços de abertura em uma matriz personalizada.
2. Rasperfeiçoou a matriz personalizada resultante por todos os 5 preços de abertura copiados.
Aqui está o que eu tenho:
Como você pode ver na figura, os preços abertos são indexados em ordem inversa (como evidenciado pelo NÚMERO de preços de barras abertas (vai em ordem crescente) e o TEMPO de preços de barras abertas (vai em ordem decrescente)), ou seja, o array é organizado como uma série de arrays timeseries.
Mas a função ArrayGetAsSeries retorna no entanto 0 (falso), o que significa: a matriz do usuário NÃO é organizada como uma array-timeseries.
Por favor, esclareça
Pergunta: como explicar isso?
P.S. Obrigado por responder às minhas perguntas.
Você já tentou usar o
Você já tentou as funções
i_maTF == Período() ??????
i_maPeriodo leva um valor razoável????
Talvez haja algo errado com o i_maShiftByPrice???
É difícil ser mais preciso.
As informações que ela emite não são corretas. Aqui está o código completo:
O registro do Expert Advisor mostra isso:
Como você pode ver, as variáveis i_maTF, i_maPeriod e i_maPrice não são o que inicializei. O que está errado?
Produz a informação errada. Aqui está o código completo:
O registro de especialista mostra isso:
Como você pode ver, as variáveis i_maTF, i_maPeriod e i_maPrice não são as mesmas que eu inicializei. O que está errado?
Como será que você conseguiu obter algo no registro se o código que você enviou não foi compilado?
E, se você compilá-lo, não haverá nenhuma esquisitice.
Pergunto-me como você conseguiu colocar alguma coisa no registro se o código que você apresentou não foi compilado?
Ah, se você compilá-lo, não terá nenhuma esquisitice.
Eu sempre compenso normalmente.
Limpei o código de impressoras e variáveis extras, para não confundir ninguém. Mas eu não os removi abaixo, por isso não compilou. Aqui está o código completo que compila:
Por favor, ajude! Como fazer uma EA fechar um pedido antigo ao abrir um novo? No Testador de Estratégia funciona bem, mas, por alguma razão, quando abro um novo, o antigo sai???????? Eu sou um zero total na programação(((
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_SELL=true;
extern int SL_sell=62; //---входные параметры по шортам
extern int Risk_sell=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
//---- other parameters
static int prevtime=0;
int ticket=0;
int x=1;
//----------------------------------------------
int Magic_BUY =123;
int Magic_SELL =321;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(Digits == 5) x=10;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//oooooooooooooooooooooooooooooooooooooooooooooooooooo
if (Time[0] == prevtime) return(0);
prevtime = Time[0];
if (!IsTradeAllowed()) {
prevtime=Time[1]; MathSrand(TimeCurrent());Sleep(30000 + MathRand()); //--- формировка бара---
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Trade( Magic_BUY, In_BUY,Ask,0,2, SL_buy, Risk_buy); //---торговля по лонгам
Trade(Magic_SELL,In_SELL,Bid,2,0, SL_sell,Risk_sell); //---торговля по шортам
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
return(0);//-----------выход из стартовой функции------------
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void Trade(int mn,bool flag,double price,int period_1,int period_2,int sl,int Risk) {
int total=OrdersTotal();
for (int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES);//---проход по ордерам--
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {
if(Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------
OrderClose(OrderTicket(),OrderLots(),price,5*x); RefreshRates();
}
return(0);
}
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooo
ticket = -1;
if ( flag &&
Open[period_1]>Open[period_2] && //----вход в рынок по условию---
OrdersTotal()<2 && //-----ограничения чемпионата------
AccountEquity()>200 &&
IsTradeAllowed()) {
if (mn<200) {
ticket= OrderSend(Symbol(), OP_BUY,lot(Risk_buy),Ask,5,Bid-x*sl*Point,0,DoubleToStr(mn,0),mn,0,Blue);
}
else {
ticket= OrderSend(Symbol(),OP_SELL,lot(Risk_sell),Bid,5,Ask+x*sl*Point,0,DoubleToStr(mn,0),mn,0, Red);
}
RefreshRates();
if ( ticket < 0) { Sleep(30000); prevtime = Time[1]; }
} //-- Exit ---
return(0); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
double lot(int R) { if (R<0)R=0; if (R>80)R=80; //------корректность ввода -------
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
int o = MathAbs(MathLog(minlot) *0.4343) + 0.5;
double lot = minlot;
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
lot = NormalizeDouble(AccountFreeMargin() * 0.00001*R, o);//---
if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) {
lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), o);
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
if(lot < minlot) lot = minlot;
double maxlot =MarketInfo(Symbol(), MODE_MAXLOT);
if(lot > maxlot) lot = maxlot;
return(lot); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_end_film_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Ou talvez escrever outra EA que funcionaria com base no princípio de 1 abriu, 2 abriu-1 fechou, 3 abriu-2 fechou, etc. Ajude realmente, realmente preciso!!!
Por favor, ajude! Como fazer um EA fechar um pedido antigo ao abrir um novo? No Testador de Estratégia funciona bem, mas, por alguma razão, quando abro um novo, o antigo sai???????? Eu não tenho a menor idéia sobre programação((!
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
Substitua
para
Meu objetivo nesta fase é entender como funciona esta ou aquela função e, neste caso particular, como funciona o ArrayGetAsSeries. Entendo que você pode usar a função ArraySetAsSeries com parâmetro set=true, que define à força a indexação, como em array-timeseries. Mas quero entender, por que no meu caso a função ArrayGetAsSeries retornou 0, apesar da matriz se parecer com timeseries (ou seja, indexada como timeseries)
Exatamente porque só EXPLAIZA como uma série cronológica.
Esta é apenas sua opinião pessoal. E se você colocar aí os números 1, 2, 1.2, 2.1, você recebe uma série de tempos para a carne de porco de 1927 (os números são condicionais). Mas isso não torna a matriz uma série de tempos - você precisa especificá-la explicitamente com a função
Pergunto-me como você conseguiu colocar alguma coisa no registro se o código que você apresentou não foi compilado?
Ah, se você compilá-lo, não terá nenhuma esquisitice.
Eu lhe dei a versão original acima, que, é claro, compila. Eu tenho uma pergunta. Por que você substituiu as linhas?
i_maTF aPeríodo(). Eu estou errado?
A documentação diz que ao calcular a média móvel:
tempo, ou seja, minha variáveli_maTF( Período. Pode ser um dos períodos do gráfico. 0 significa o período do gráfico atual.) Eu tinha 0 especificado.i_maPeríodo não é mencionado.Por favor, esclareça!