[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 524
Meu Expert Advisor abre três ordens em meu terminal, em algum momento deve fechar as três ordens, mas por alguma razão fecha apenas duas, não dá erros.
Aqui está esta peça que deve fechar negócios
Não entendo o que está errado e por que apenas dois negócios são fechados. Por favor, me diga quem sabe o quê.
No entanto, isto também não ajudou. Não rearranjar o laço ou substituir a continuidade não ajudou, como se a EA não visse suas próprias três ordens, e apenas apagasse duas.
sss2019: Às vezes as coisas são tão incompreensíveis, nada lógicas, acho que há erros no próprio ambiente terminal.
Para que pareça menos necessário começar pelo estudo de um livro didático e um manual. Em seguida, tente encontrar explicações sobre questões semelhantes no fórum.
Como você organizaria melhor o drawdown máximo do EA, no qual ele deixa de funcionar, você pode definir uma variável estática que acumulará a quantidade de perdas?
O Expert Advisor deve parar de trabalhar, mas começará a trabalhar novamente após reiniciar ou mudar os parâmetros.
Ao inicializar uma EA, você pode salvar o saldo atual em uma variável estática. E na função Iniciar, você pode verificar quantos por cento do saldo atual diminuiu em relação ao saldo inicial e se a porcentagem é mais do que admissível - proibir a comercialização. Resumidamente, sem nenhum código. Após o reinício, o consultor especializado se lembrará do novo equilíbrio inicial.
Ao inicializar o Expert Advisor, o saldo atual pode ser salvo em uma variável estática. E na função Start, verifique quanto o saldo atual escorregou do saldo inicial, e se a porcentagem é maior do que o permitido - o comércio é proibido. Resumidamente, sem nenhum código. Após o reinício, o Consultor Especialista se lembrará do novo equilíbrio inicial.
1. Ao inicializar o Expert Advisor, você pode salvar o saldo atual em uma variável estática. Então a função Start verifica em quantos por cento o saldo atual escorregou do saldo inicial e se a porcentagem exceder o valor permitido, o comércio será proibido. Em resumo, sem nenhum código.
2. Após o reinício, o avaliador se lembrará do novo equilíbrio original.
1. Você pode. Eu tenho esta opção (com código) - você mesmo inicializa as variáveis:
externint MaxLoss = 90; // Максимально допустимая просадка в процентах от балансаint orderIndex;
bool IsExpertFailed = false;
bool IsExpertStopped = false;
double lots; // вспомогательная переменная для расчета нового размера лота double Lots_New; // Количество лотов для новых ордеровint ticket; // Номер ордераdouble orderLots; // Lots double orderProfit; // Profitdouble Price; // Цена открытия рыночного ордераdouble SL; // Значение StopLoss ордераdouble TP; // Значение TakeProfit ордераstaticdatetime prevtime = 0; // по ценам открытияint start()
{
if (IsExpertStopped)
{
Comment("Не удалось инициализировать советник!");
return (0);
}
if (IsExpertFailed)
{
Comment("Критическая ошибка! Советник остановлен.");
return (0);
}
Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL );
int orderCount = 0;
// ------------------------------------------------Учет ордеров только ЭТОГО ЭКСПА---------------------------int orderType;
for (orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
{
if (!OrderSelect(orderIndex, SELECT_BY_POS)) continue;
if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != magic)) continue;
orderType = OrderType();
if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue;
ticket = OrderTicket( ); // Номер ордера
orderLots = OrderLots(); // Lots
orderProfit = OrderProfit() + OrderSwap(); // Profit
Price = OrderOpenPrice(); // Цена открытия рыночного ордера
SL = OrderStopLoss(); // Значение StopLoss ордера
TP = OrderTakeProfit(); // Значение TakeProfit ордераif (ticket>0) // Если позиция открылась
{
while(OrderSelect(ticket,SELECT_BY_TICKET)==false) // Если ордер выбран
{
Sleep(100);
}
double OpenPrice=OrderOpenPrice();
}
// Проверка на предельную просадку double loss = - ((orderProfit * 100.0) / AccountBalance());
if (loss > MaxLoss)
{
Print ("MaxLoss");
CloseAllOrders(magic);
IsExpertFailed = true;
return (0);
}
orderCount++; // считаем ордера (не больше i)
}
2. Não. Não se lembrará do nível de equilíbrio que existia antes do início deste EXPERTADOR pela primeira vez. Só se lembrará do nível atual na variável
Boa tarde! Eu tinha uma pergunta antes sobre a representação correta das citações em Excel. Esta pergunta foi respondida graças aocusto.Agora eu tenho uma pergunta, é possível fazer (sem MQL5 e dll) os dados para mais moedas a serem carregadas? O esquema é mostrado abaixo, ao invés de "..." os valores das datas correspondentes, os valores dos preços de fechamento e o período atual.
Presumo que a resposta à pergunta envolverá possíveis correções ao meu código. Estou anexando ao arquivo o código do Expert Advisor que escreve valores de preços de fechamento para um, instrumento financeiro atual.
#property copyright "S.I.Shlikov"#property link ""int init()
{
string Name=Symbol();
int h=FileOpen(Symbol()+"-"+Period()+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
if(h<1)
{
Print("Файл не найден : ", GetLastError());
return(false);
}
FileSeek(h, 0, SEEK_END);
FileWrite(h,"Date",Name,"Period",Period());
FileClose(h);
}
int start()
{
int h=FileOpen(Symbol()+"-"+Period()+".csv",FILE_CSV|FILE_WRITE|FILE_READ,";");
if(h<1)
{
Print("Файл не найден : ", GetLastError());
return(false);
}
string Wtime=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
FileSeek(h, 0, SEEK_END);
FileWrite(h,Wtime,NormalizeDouble(Close[0], Digits));
FileClose(h);
return(0);
}
Meu Expert Advisor abre três ordens em meu terminal, em algum momento deve fechar as três ordens, mas por alguma razão fecha apenas duas, não dá erros.
Aqui está esta peça que deve fechar negócios
Não entendo o que está errado e por que apenas dois negócios são fechados. Por favor, me diga quem sabe o quê.
Fazer o ciclo de forma diferente
No entanto, isto também não ajudou. Não rearranjar o laço ou substituir a continuidade não ajudou, como se a EA não visse suas próprias três ordens, e apenas apagasse duas.
Às vezes as coisas são tão incompreensíveis, nada lógicas, acho que há erros no próprio ambiente terminal.
Como você organizaria melhor o drawdown máximo do EA, no qual ele deixa de funcionar, você pode definir uma variável estática que acumulará a quantidade de perdas?
O Expert Advisor deve parar de trabalhar, mas começará a trabalhar novamente após reiniciar ou mudar os parâmetros.
Ao inicializar uma EA, você pode salvar o saldo atual em uma variável estática. E na função Iniciar, você pode verificar quantos por cento do saldo atual diminuiu em relação ao saldo inicial e se a porcentagem é mais do que admissível - proibir a comercialização. Resumidamente, sem nenhum código. Após o reinício, o consultor especializado se lembrará do novo equilíbrio inicial.
Ao inicializar o Expert Advisor, o saldo atual pode ser salvo em uma variável estática. E na função Start, verifique quanto o saldo atual escorregou do saldo inicial, e se a porcentagem é maior do que o permitido - o comércio é proibido. Resumidamente, sem nenhum código. Após o reinício, o Consultor Especialista se lembrará do novo equilíbrio inicial.
Você já entendeu a pergunta?
1. Ao inicializar o Expert Advisor, você pode salvar o saldo atual em uma variável estática. Então a função Start verifica em quantos por cento o saldo atual escorregou do saldo inicial e se a porcentagem exceder o valor permitido, o comércio será proibido. Em resumo, sem nenhum código.
2. Após o reinício, o avaliador se lembrará do novo equilíbrio original.
1. Você pode. Eu tenho esta opção (com código) - você mesmo inicializa as variáveis:
2. Não. Não se lembrará do nível de equilíbrio que existia antes do início deste EXPERTADOR pela primeira vez. Só se lembrará do nível atual na variável
AccountBalance(). para esta conta.
Boa tarde! Eu tinha uma pergunta antes sobre a representação correta das citações em Excel. Esta pergunta foi respondida graças aocusto .Agora eu tenho uma pergunta, é possível fazer (sem MQL5 e dll) os dados para mais moedas a serem carregadas? O esquema é mostrado abaixo, ao invés de "..." os valores das datas correspondentes, os valores dos preços de fechamento e o período atual.
Presumo que a resposta à pergunta envolverá possíveis correções ao meu código. Estou anexando ao arquivo o código do Expert Advisor que escreve valores de preços de fechamento para um, instrumento financeiro atual.