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 1069
![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
CloseAllBuy() é chamado em um único lugar: na função OnTick() pela condição if(Bid>buycloseprice) CloseAllBuy(); esta condição não ocorreu na nova habilitação e também não ocorreu durante o período de desativação, mas a função CloseAllBuy() foi acionada de qualquer forma quando a EA foi habilitada novamente.
Aqui está um pedaço de código:
não é visível.
Pergunta:você poderia aconselhar como exatamente neste caso aplicar uma variável global? Eu não consigo entender. Obrigado.
Leia a documentaçãoVariáveis globais do terminal, verifique a ajuda do meta-editor, é mais rápido de atualizar lá.
Alternativamente, você pode salvar configurações e valores de variáveis importantes em um arquivo e lê-los a partir daí ao carregar.
Mas na maioria das vezes você pode passar sem tudo isso, basta usar sua cabeça e fazer a lógica correta no código.
total=OrdensTotal();
if(total>0)
{
for(int i=0; i<=OrdensTotal(); i++)
if(OrderSelect(i,SELECT_BY_POS)==verdadeiro)
{
if(OrderType()==OP_BUY && OrderMagicNumber()==magic)
{ RefreshRates();
if(Bid>buycloseprice) CloseAllBuy();
}
if(OrderType()==OP_SELL && OrderMagicNumber()==magic)
{ RefreshRates();
if(Ask<sellcloseprice) CloseAllSell();
}
}
}
if((total==0) ||| (total>0 && OrderSelect(1,SELECT_BY_POS,MODE_TRADES)==verdadeiro && OrderSymbol()!=Symbol())
{
Comment("No open positions");
if(condition && timeBar!=iTime(Symbol(),Period(),1))
{
Print("Criterion-1 for BAY has appeared");
int poz_1 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_2 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_3 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_4 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_5 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
timeBar=iTime(Símbolo(),Período(),1);
double spread = (Ask-Bid);
buyopentime = iTime(Symbol(),Period(),0);
buycloseprice = NormalizeDouble((iOpen(Symbol(),Period(),0)+spread+75*Point),Digitos);
Comentário ("Magic 510015 BAY");
Imprimir ("CLOSE PRICE = ",buycloseprice");
}
}
}
//+
+*/
void CloseAllBuy()
{
bool fc; for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break;
if (OrderType()==OP_BUY)
{
fc=OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slip);
buycloseprice=0.0;
tc=OrderCloseTime();
}
}
}
Repetindo em texto:
Ainda não está claro de onde vem o preço de fechamento de compra, o que acontece com ele antes da condiçãose(Licitação>preço de fechamento de compra) FechamentoEllBuy();. Porque só vejo isto em código, depois de - buycloseprice = NormalizeDouble((iOpen(Symbol(), Period(), 0)+spread+75*Point), Digits);, mas onde estebuycloseprice é declarado e que valor é inicializado?
Se este é o suposto preço de fechamento de uma ordem de compra, então a lógica se quebra aqui porque o valor é passado para a variável depois que ela foi acionada e você não nos mostrou o que estava nela antes.
Agora um pouco de aritmética, existe tal laço no código:
for(int i=0; i<=OrdensTotal(); i++)
Digamos, há 5 pedidos que vão de 0 a 4. O laço conta de 0 a 5. Este laço funciona corretamente?
Além disso, na linha if(condição && timeBar!=iTime(Símbolo(),Período(),1), de onde vem a condição e a barra de tempo?