Levando em conta as críticas construtivas, alterei o código da função de verificação:
bool Check_Trading()
{
//--- проверка разрешения автоматической торговли на терминалеif(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
{
Print("Ошибка разрешения автоматической торговли на терминале! ",GetLastError());
return(false);
}
//--- проверка разрешения автоматической торговли на стороне сервераif(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))
{
Print("Ошибка разрешения автоматической торговли на стороне сервера! ",GetLastError());
return(false);
}
//--- проверка синхронизированности данных по текущему символу между терминалом и серверомif(!SymbolIsSynchronized(_Symbol))
{
Print("Ошибка синхронизированности данных по текущему символу! ",GetLastError());
return(false);
}
//--- проверка достаточности средств для торговлиif(!CheckMoneyForTrade(_Symbol,GetLot(),ORDER_TYPE_SELL))
{
Print("Ошибка проверки достаточности средств для торговли! ",GetLastError());
return(false);
}
//--- проверки корректности объёма сделкиstring descript;
if(!CheckVolumeValue(GetLot(),descript))
{
Print("Ошибка проверки корректности объёма сделки! ",GetLastError());
return(false);
}
//--- проверка прошла успешноreturn(true);
}
As funções CheckMoneyForTrade() e CheckVolumeValue() não foram postadas, pois estão disponíveis gratuitamente e foram retiradas daqui.
Sim, parece ser normal, mas é melhor verificar o volume e a suficiência em uma função e alterar a lógica da suficiência. Verificamos se o lote de margem é maior ou menor, mas não o reduzimos; se o lote solicitado for menor, eu também calculo o lote em relação à margem disponível, qual lote pode ser definido e o comparo com o lote mínimo e, se for menor, a negociação está definitivamente encerrada.
Bom dia a todos! Tenho um indicador RSI estocástico. O problema é que ele funciona muito lentamente. Pelo que entendi, o principal "freio" cria essa seção por causa do período grande, que é usado para pesquisar o mínimo e o máximo nas matrizes:
Idealmente, a solução poderia ser se o indicador percorresse todas as barras do histórico durante a primeira execução e atualizasse apenas a última barra durante as próximas. Mas não entendo como fazer isso. É possível fazer isso? Em caso afirmativo, ficarei grato se você compartilhar um link ou uma orientação sobre como fazer isso.
Aqui está o código completo do indicador:
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{ // OnCalculateArraySetAsSeries(time,true);
if( t != time[0]) { // контроль бара
t = time[0];
ArrayInitialize(Buffer_Step1_RSI,0);
CopyBuffer(RSI_Handle,0,0,rates_total,Buffer_Step1_RSI);
double lRsi, lLowestRsi, lHighestRsi;
int ZZZ = rates_total - MathMax(MathMax(RsiLength,StochLength),MathMax(SmoothK,SmoothD)) - 1;
for (int i = ZZZ; i >= 0; i-- ) { // Цикл расчета индикатора // ====== Calulate Stochastic of RSI ======
lRsi = Buffer_Step1_RSI[i];
lLowestRsi = Buffer_Step1_RSI[ArrayMinimum(Buffer_Step1_RSI,i,StochLength)];
lHighestRsi = Buffer_Step1_RSI[ArrayMaximum(Buffer_Step1_RSI,i,StochLength)];
Buffer_Step2_Calculate[i] = ( (lRsi-lLowestRsi) / (lHighestRsi-lLowestRsi) ) * 100;
// ====== Рассчитываем само значение предварительное (МА1) ======// Расчет для всех циклов, кроме первого (МА1)
Step3_MA_Sum = Step3_MA_Sum - Buffer_Step2_Calculate[i + SmoothK + 1] + Buffer_Step2_Calculate[i+1];
// Расчет для первого цикла (идет 2-ым номером, т.к. в IF можно обнулить данные) (МА1)if (i == ZZZ) {
Step3_MA_Sum = 0;
for (int kk = i+1; kk <= i + SmoothK + 1; kk++) Step3_MA_Sum = Step3_MA_Sum + Buffer_Step2_Calculate[kk];
}
Buffer_Step3_MA1[i] = Step3_MA_Sum / SmoothK;
// ====== Расчитываем само значение индикатора (МА2) ====== // Расчет для всех циклов, кроме первого (МА2)
Step4_MA_Sum = Step4_MA_Sum - Buffer_Step3_MA1[i + SmoothD+1] + Buffer_Step3_MA1[i+1];
// Расчет для первого цикла (идет 2-ым номером, т.к. в IF можно обнулить данные) (МА2) if (i == ZZZ) {
Step4_MA_Sum = 0;
for (int kk = i+1; kk <= i + SmoothD + 1; kk++) Step4_MA_Sum = Step4_MA_Sum + Buffer_Step3_MA1[kk];
}
Buffer_Step4_MA2_IndicatorData[i] = Step4_MA_Sum / SmoothD;
FirstCycle = false;
} // Цикл расчета индикатора
} // контроль бараreturn(rates_total);
} // OnCalculate
Acho que está bom, mas é melhor colocar a verificação de volume e suficiência em uma função e alterar a lógica para suficiência também. Verificamos se o lote de margem é maior ou menor, mas não o reduzimos; se o lote solicitado for menor, eu também calculo o lote em relação à margem disponível, qual lote pode ser definido, e o comparo com o lote mínimo e, se for menor, então a negociação está definitivamente encerrada.
2023.02.0214:41:05.466 Experts automated trading is disabled because the account has been changed
2023.02.0214:41:09.990 Experts automated trading is enabled
2023.02.0214:42:43.410 Experts automated trading is disabled because the account has been changed
2023.02.0214:42:52.690 Experts automated trading is enabled
2023.02.0214:43:33.882 Experts automated trading is disabled because the account has been changed
2023.02.0214:43:44.869 Experts automated trading is enabled
Seria interessante saber o que é isso? Não no sentido de tradução para o russo, pois eu já a traduzi:
2023.02.0214:41:05.466 Автоматическая торговля экспертов отключена, так как аккаунт был изменен
mas no sentido de como uma conta pode ser alterada? Alguém pode me dizer o que diabos está acontecendo com minha conta e o que fazer nesses casos?
Talvez isso esteja de alguma forma relacionado ao fato de eu ter mudado temporariamente da conta real para a conta de demonstração?
Bom dia e bom humor!
Levando em conta as críticas construtivas, alterei o código da função de verificação:
As funções CheckMoneyForTrade() e CheckVolumeValue() não foram postadas, pois estão disponíveis gratuitamente e foram retiradas daqui.
Esse mínimo será suficiente para evitar o problema com o Expert Advisor que tive anteontem?
Atenciosamente, Vladimir.
Bom dia e bom humor a todos!
Levando em conta as críticas construtivas, alterei o código da função de verificação:
As funções CheckMoneyForTrade() e CheckVolumeValue() não foram publicadas, pois estão disponíveis gratuitamente e foram retiradas daqui.
Esse mínimo será suficiente para evitar o problema com o Expert Advisor que tive anteontem?
Atenciosamente, Vladimir.
Sim, parece ser normal, mas é melhor verificar o volume e a suficiência em uma função e alterar a lógica da suficiência. Verificamos se o lote de margem é maior ou menor, mas não o reduzimos; se o lote solicitado for menor, eu também calculo o lote em relação à margem disponível, qual lote pode ser definido e o comparo com o lote mínimo e, se for menor, a negociação está definitivamente encerrada.
Bom dia a todos! Tenho um indicador RSI estocástico. O problema é que ele funciona muito lentamente. Pelo que entendi, o principal "freio" cria essa seção por causa do período grande, que é usado para pesquisar o mínimo e o máximo nas matrizes:
Idealmente, a solução poderia ser se o indicador percorresse todas as barras do histórico durante a primeira execução e atualizasse apenas a última barra durante as próximas. Mas não entendo como fazer isso. É possível fazer isso? Em caso afirmativo, ficarei grato se você compartilhar um link ou uma orientação sobre como fazer isso.
Aqui está o código completo do indicador:
Acho que está bom, mas é melhor colocar a verificação de volume e suficiência em uma função e alterar a lógica para suficiência também. Verificamos se o lote de margem é maior ou menor, mas não o reduzimos; se o lote solicitado for menor, eu também calculo o lote em relação à margem disponível, qual lote pode ser definido, e o comparo com o lote mínimo e, se for menor, então a negociação está definitivamente encerrada.
Obrigado, Valery!
Saudações, Vladimir.
E aqui estão os primeiros resultados da função:
Seria interessante saber o que é isso? Não no sentido de tradução para o russo, pois eu já a traduzi:
mas no sentido de como uma conta pode ser alterada? Alguém pode me dizer o que diabos está acontecendo com minha conta e o que fazer nesses casos?
Talvez isso esteja de alguma forma relacionado ao fato de eu ter mudado temporariamente da conta real para a conta de demonstração?
Atenciosamente, Vladimir.
Talvez isso esteja de alguma forma relacionado ao fato de eu ter mudado temporariamente da conta real para a conta de demonstração?
Sim
Obrigado, Sergey, agora eu sei.
Saudações, Vladimir.
O Expert Advisor usa um indicador no TF especificado, como posso descobrir o TF a partir do identificador do indicador?
Não estou entendendo, o TF especificado deve ser conhecido. Você precisa explicar melhor a situação.