Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1940

 
Nikolay Ivanov #:

o código enforcado não pode ser aplicado em nenhum lugar. Você tem que definir as tarefas que podem ser feitas. E é mais fácil estragar o código... Os indicadores têm que funcionar rapidamente e não há tempo para cálculos super longos.

Gostaria de saber os limites dentro dos quais algo pode ser criado. Quanto mais eu não sou um programador, mais eu não saberia como lidar com isso. Bem, eu vou procurar algo para ler

 
Aleksandr Kononov #:

Gostaria de conhecer a estrutura dentro da qual eu poderia criar algo. É difícil para um iniciante entendê-lo, especialmente porque não sou programador de forma alguma. OK, vou ver o que posso ler.

Você normalmente só precisa de uma CCI, máximo 3 :) E você tem 200... Concordo que é difícil não ultrapassar os limites, é preciso experiência, para definir a tarefa correta e viável que será concluída com sucesso em um período de tempo razoável - é difícil. Portanto, se você precisar de conselhos sobre onde cavar, você deve se concentrar na otimização e minimização das idéias... Por exemplo, CCI com período 20 e CCI com período 21... quase a mesma coisa e não faz sentido calcular ambos. Quanto maior o período, menor o efeito, você precisa encontrar um número razoável. Uma bela solução sempre funciona rapidamente.

 
Nikolay Ivanov #:

Bem, uma CCI geralmente é suficiente, 3 no máximo :) e você tem 200... Concordo com você sobre a dificuldade de permanecer dentro dos limites... você precisa de experiência, é difícil definir a tarefa certa, realizável, que será concluída com sucesso em um período de tempo razoável. Portanto, se você precisar de conselhos sobre onde cavar, você deve se concentrar na otimização e minimização das idéias... Por exemplo, CCI com período 20 e CCI com período 21... quase a mesma coisa e não faz sentido calcular ambos. Quanto maior o período, menor o efeito, você precisa encontrar um número razoável. Uma bela solução sempre funciona rapidamente.

Entendo que o perfilador ajudará a medir o consumo de memória. Portanto, vamos otimizá-lo). Mesmo assim, se alguém souber onde ler sobre isso, envie-me o link...

 

Olá a todos!

Por favor, informe o que deve ser adicionado ao código para mudar o MA não apenas para frente (valor positivo), mas também para trás (valor negativo)

Aqui está o código do Expert Advisor:

// Параметры советника
input string  sParametersEA = "";     // Параметры советника
input double  Lot           = 0.01;   // Количество лотов
input int     StopLoss      = 30;     // Стоп (SL)
input int     TakeProfit    = 30;     // Тейк (TP)
input int     Slippage      = 3;      // Проскальзование (в пунктах)
input int     Magic         = 1;      // Индентификатор советника
input double  K_Martin1     = 0.01;    // Множитель мартин 1
input double  K_Martin2     = 1.9;    // Множитель мартин 2
input double  K_Martin3     = 1.4;    // Множитель мартин 3
input int     OrdersClose   = 3;      // Ограничение лотности мартин1
input int     OrdersClose2  = 5;      // Ограничение лотности мартин2
input int     DigitsLot     = 2;      // Точность лотности
// Параметры индикатора
input string  sParametersMA = "";     // Параметры индикатора
input int     PeriodMA      = 14;     // Период мувинга
input int     MovingShift   = 1;      // Сдвиг мувинга
// Глобальные переменные
datetime Start,newbar;
double dMA;
double MaxMartinLot;
double MaxMartinLot2;
//+-----------------------------------------------------------------------------------------------+
int OnInit()
  {
Start          = TimeCurrent();
MaxMartinLot   = Lot*MathPow(1.4,OrdersClose);
MaxMartinLot2  = Lot*MathPow(K_Martin2,OrdersClose2);
int Y          = 15;
DrawLABEL("nextlot",1,5,Y,clrLime,""); 
Y += 20;
DrawLABEL("currentlot",1,5,Y,clrLime,"");
Y += 30;
return(INIT_SUCCEEDED);
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
// Пишем какой лот текущий и какой следующий
      DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
      DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); 
 
   }
 
законопослушный гражданин #:

Olá a todos!

Por favor, informe o que deve ser adicionado ao código para mudar o MA não apenas para frente (valor positivo), mas também para trás (valor negativo)

Aqui está o código do Expert Advisor:

Adicione ao turno o valor negativo desejado, mas o valor + turno não deve ser inferior a zero.

 
ALEKSANDR SOKOLOV #:

Adicione o valor negativo desejado ao turno, mas certifique-se de que o valor + turno seja pelo menos zero.

Obrigado, vou tentar.

 

Boa tarde.

Ajuda com o código, talvez haja exemplos.
Tarefa:

Há várias ordens abertas, com lotes diferentes, em direções diferentes. Um deles é enterrado com lucro, vamos supor 20. Entretanto, há uma ordem em aberto com o lucro negativo, vamos supor -55 com 0,05 lotes. Quero fechar uma parte de uma ordem negativa pelo valor do lucro de uma ordem positivamente fechada para diminuir o saque.

Tentei escrever isto usando o operador, mas não correu bem.

Agradecemos antecipadamente.

 

Olá, este código é do livro de Fedoseev. Por que o indicador não é desenhado na janela, o registro diz que ele está rodando, sem erros durante a compilação, uma janela adicional se abre (vazia), este código é do livro, com o meu é exatamente o mesmo resultado. O que está errado?

//+------------------------------------------------------------------+

//| 015 Symbol.mq5 |

//+------------------------------------------------------------------+

#propriedade copyright "Dmitry Fedoseev"

#link do proprietário "mailto:for-good-letter@yandex.ru

#propriedade versão "1.00"

#janela_indicadora de propriedade_separarate_window

#property indicator_buffers 4

# indicadores de propriedade_plots 1

//--- barra de enredo

#indicador de propriedade_label1 "bar

#indicador de propriedade_tipo1 DRAW_CANDLES

#Indicador de propriedade_color1 clrGray,clrBlue,clrRed

#property indicator_style1 STYLE_SOLID

#largura_do_indicador de propriedade1 1

//--- parâmetros de entrada


input string symbol=""";

drawBars de entrada=falso;


sym;


//--- amortecedores indicadores

barBuffer duplo1[];

barBuffer duplo2[];

barBuffer duplo3[];

barBuffer duplo4[];

//+------------------------------------------------------------------+

//| Função de inicialização do indicador personalizado |

//+------------------------------------------------------------------+

int OnInit()

{

sym=símbolo;

StringTrimLeft(sym);

StringTrimRight(sym);

if(sym=="""){

sym=Symbol();

}

if(!SymbolSelect(sym,true)){

Alerta ("Símbolo desconhecido", sym);

return(INIT_FAILED);

}

if(drawBars){

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_BARS);

}

senão{

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_CANDLES);

}

//--- cartografia de amortecedores indicadores

SetIndexBuffer(0,barBuffer1,INDICADOR_DADOS);

SetIndexBuffer(1,barBuffer2,INDICADOR_DADOS);

SetIndexBuffer(2,barBuffer3,INDICADOR_DADOS);

SetIndexBuffer(3,barBuffer4,INDICATOR_DATA);

//---

return(INIT_SUCCEED);

}


nulo OnDeinit(const int r){

Comentário(");

EventoKillTimer();

}

//+------------------------------------------------------------------+

//| Função de iteração de indicador personalizada |

//+------------------------------------------------------------------+

int OnCalculate(const int taxas_total,

const int prev_calculado,

const datetime &time[],

const double &open[],

const double &high[],

const double &low[],

const double &close[],

const long &tick_volume[],

const long &volume[],

const int &spread[])

{

int bars=Bars(sym,Period());

if(bars==0){

Comentário("Prazo de formação ",sym","...");

EventSetTimer(1);

retorno(0);

}

int start;

if(prev_calculated==0){

Comentário(");

EventoKillTimer();

data/hora tm[1];

if(CopyTime(sym,Period(),bars-1,1,tm)==-1){

retorno(0);

}

start=0;

for(;start<rates_total;start++){

if(time[start]>=tm[0]){

pausa;

}

}

}

senão{

start=prev_calculated-1;

}

MqlRates r[1];

for(int i=start;i<rates_total;i++){

if(CopyRates(sym,Period(),time[i],1,r)==-1){

retorno(0);

}

barBuffer1[i]=r[0].open;

barBuffer2[i]=r[0].high;

barBuffer3[i]=r[0].low;

barBuffer4[i]=r[0].close;

}

retorno(taxas_total);

}


OnTimer() nulo

{

ChartSetSymbolPeriod(0,Symbol(),Period());

}


//+------------------------------------------------------------------+

Arquivos anexados:
 
MatveySt #:

Olá, este código é do livro de Fedoseev. Por que o indicador não é desenhado na janela, o registro diz que ele está rodando, ao compilar sem erros, uma janela adicional se abre (vazia), este código é do livro, com o meu exatamente o mesmo resultado. O que está errado?


Alt s cola o código.

E quando você lança o indutor, você entra na ferramenta?

 
Valeriy Yastremskiy #:

Alt s para inserir o código.

E quando você lança o indutor, você entra na ferramenta?

Não entendo bem, acabo de começar a estudar, inicio o indicador no terminal a partir do navegador, todos os prazos estão na janela pop-up. Quando sobre o perfil de dados históricos, ele é desenhado, mas quando chega ao fim, desaparece.
Razão: