[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 163

 
polsvv ,é para isso que serve a magia.
 
vnn:

Olá a todos...

Você poderia me dizer como construir o caminho para os arquivos de história do MetaTrader 4? Como "c:{\i1}fileiras de programas {\i}metatrader 4\i}alpari-clássico"?

https://docs.mql4.com/ru/files/FileOpenHistory
 

Muito obrigado, Sergeev, acho que o encontrei...

Print("Terminal path: ", TerminalPath() + "\\history\\" + AccountServer() + "\\");

esta linha sai o caminho correto, mesmo que o editor esteja errado nas cores. Você provavelmente deveria escrever o código no bloco de notas. Estava brincando.

 

Boa noite a todos!

No tutorial de Sergey Kovalev, eu encontrei um especialista - parada de trilha. Eu o copiei no MetaEditor, compilei-o, mas o programa não funciona. Por favor, informe qual é a razão. Talvez eu esteja fazendo algo errado.

 

está escrito em mql?)

apenas me dê o código.

 
Pessoal, me expliquem como usar o iCustom
Eu estou escrevendo
duplo BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",1,0);
duplo BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0)
Eu não consigo acertar ...
Eu tenho uma tarefa para obter sinais do indicador de Bandas linha superior e inferior...... Exatamente Bandas.....
 
//-------------------------------------------------------------------- // modifystoploss.mq4 // Concebido para ser usado como exemplo no tutorial MQL4. //-------------------------------------------------------------------- external int Tral_Stop=10; // Dist. pursuit //--------------------------------------------------------------- 1 -- int start() // Special function start { string Symb=Symbol(); // Fin. ferramenta //--------------------------------------------------------------- 2 -- for(int i=1; i<=OrdersTotal(); i++) // Loop de pedido { if (OrderSelect(i-1,SELECT_BY_POS)==true) // Se houver uma próxima { // Análise do pedido: int Tip=OrderType(); // Tipo de pedido if(OrderSymbol()!=Symb||Tip>1)continue;// Não nosso pedido duplo SL=OrderStopLoss(); // SL do pedido selecionado //------------------------------------------------------ 3 -- while(true) // Loop de modificação { double TS=Tral_Stop; // Valor inicial em Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Dist. mínima se (TS<Min_Dist) // Se houver menos do que o valor permitido para o pedido, então o pedido será executado.
               TS=Min_Dist; // Novo valor de TS //--------------------------------------------------- 4 -- bool Modificar=falso; // Não atribuído para modificar interruptor(Dica) // Por tipo de pedido { caixa 0 : // Pedido de compra se (NormalizeDouble(SL,Digits)< // Se menor desejar.
                     NormalizeDouble(Bid-TS*Point,Dígitos)) { SL=Bid-TS*Point; // depois modificar a string Text="Buy "; // text for Buy Modify=true; // assigned to modify } break; // exit if case 1 : // Sell order if (NormalizeDouble(SL,Dígitos)> // if above requested.
                     NormalizeDouble(Ask+TS*Point,Digits)|| NormalizeDouble(SL,Digits)==0)//ou igual a zero { SL=Ask+TS*Point; // depois modificá-lo Text="Sell "; // Modificar=verdadeiro; // atribuído para modificar } } // Fim da chave se (Modificar==falso) // se não modificar quebra; // sair enquanto //--------------------------------------------------- 5 -- duplo TP =OrderTakeProfit(); // TP de ordem selecionada.
            preço duplo =OrderOpenPrice(); // Preço do pedido selecionado. int Ticket=OrderTicket(); // Número do pedido selecionado. Alerta ("Modificar ",Texto,Ticket,". Aguardando resposta..."); bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Modificá-lo!
            //--------------------------------------------------- 6 -- se (Ans===verdadeiro) // Funcionou :) { Alerta ("Encomendar ",Texto,Ticket," modificado:)"); pausa; // A partir do loop modificado.
              } //--------------------------------------------------- 7 -- int Error=GetLastError(); // Falhou :( switch(Error) // Overcome errors { case 130:Alert("Wrong stops. Try again."); RefreshRates(); // Refresh data continue; // No próximo caso de iteração 136:Alerta("Sem preço. À espera de um novo tick..."); while(RefreshRates()==false) // Até o novo tick Sleep(1); // Atraso no loop continua; // Próximo caso de iteração 146:Alerta("O subsistema de negociação está ocupado.Tente novamente"); Sleep(500); // Solução simples RefreshRates(); // Refresh data continue; // Próxima iteração // Caso de erros críticos 2 : Alerta("General error."); break; // Sair switch case 5 : Alert("Old client terminal version."); break; // Sair switch case 64 : Alert("Account blocked."// Sair da caixa de interruptores 133:Alerta("Comercialização proibida"); pausa; // Sair da caixa de interruptores padrão: Alerta("Erro ",Erro); // Erro } pausa; // Fim do laço modificado } // Fim do laço modificado //------------------------------------------------------ 8 -- } // Fim da análise do pedido //--------------------------------------------------------------- 9 -- retorno; // Sair do início() } //-------------------------------------------------------------- 10 --
 
VOLDEMAR:
Pessoal, me expliquem como usar o iCustom
Eu escrevo
duplo BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",1,0);
duplo BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0)
Eu não consigo acertar ...
Eu tenho uma tarefa para obter sinais do indicador de Bandas linha superior e inferior...... Exatamente Bandas.....
https://docs.mql4.com/ru/indicators/iBands
 
FelixFX:

Boa noite a todos!

No tutorial de Sergey Kovalev, eu encontrei um especialista - parada de trilha. Eu o copiei no MetaEditor, compilei-o, mas o programa não funciona. Por favor, informe qual é a razão. Talvez eu esteja fazendo algo errado.


Use isto:

Nas variáveis do usuário, escrevemos:

extern string   с9="------ Трейлингстоп ------";
extern int      TrailingStop=20; //Трейлинг-Стоп рыночного ордера. Если = 0 или то тарла нет
extern int      TrailingStep=5; //Шаг трала рыночного ордера
extern bool     WaitProfit = true; // Если true, то ждать профит = значению TrailingStop и только потом начинать тралить
                                    //Иначе, трейлинговать не дожидаясь положительного профита

extern string   с10=" -------- Прочие параметры -------------";
extern int      MAGIC=123456;//У ордеров открытых вручную MAGIC=0
extern int      Proskalz=10;//Проскальзывание

Na EA Start, escreva:

// ----------------------------- Тралим ордера ------------------------------------
TrailingRyn_b(TrailingStop,TrailingStep,Proskalz,MAGIC,WaitProfit,false);

Após o início em subprogramas personalizados, escreva:

// =================================================================================================
// ************************* Трейлинг рыночных ордеров *********************************************
// =================================================================================================


// =================  TrailingRyn() =============================================================
// функция осуществляет трейлинг рыночных ордеров 
// ----------------------------------------------
void TrailingRyn_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, int MAGIC, bool WaitProfit,  bool UseTrailingSound) {
  string SMB=Symbol(); 
  int i;
  int MinLevel=MarketInfo(SMB,MODE_STOPLEVEL);//Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах   
  int SchBuy=SchBuy(MAGIC);
  int SchSell=SchSell(MAGIC);
  if(ryn_TrStop>=MinLevel && ryn_TrStep>0 && (SchBuy>0 || SchSell>0)){    
    for (i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {WriteError(i);}
      else {
        if (OrderSymbol()==SMB && OrderMagicNumber()==MAGIC){
          TrailingPositions_b(ryn_TrStop,ryn_TrStep,Proskalz,WaitProfit,UseTrailingSound);
        }
      }
    }
  }
 if(ryn_TrStop>=MinLevel && ryn_TrStep==0)
 Alert("Трейлинг невозможен - ryn_TrStep==0");
} 
// =================================================================================================

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, bool WaitProfit, bool UseTrailingSound){
  if(OrderType()==OP_BUY){
    if(!WaitProfit || (Bid-OrderOpenPrice())>ryn_TrStop*Point){
      if (OrderStopLoss()<Bid-(ryn_TrStop+ryn_TrStep-1)*Point){
        ModifyStopLoss_b(Bid-ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
  if(OrderType()==OP_SELL){
    if(!WaitProfit || OrderOpenPrice()-Ask>ryn_TrStop*Point) {
      if(OrderStopLoss()>Ask+(ryn_TrStop+ryn_TrStep-1)*Point || OrderStopLoss()==0){
        ModifyStopLoss_b(Ask+ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss_b(double ldStopLoss, bool UseTrailingSound){
  bool fm=false;
  string NameTrallingSound  = "ok.wav";// Наименование звукового файла для трейлинга
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if(fm!=0 && fm!=-1){
    if(UseTrailingSound) { PlaySound(NameTrallingSound);}
  }   
  if(fm==0 || fm==-1) { ModifError();}
}
//+------------------------------------------------------------------+

Funções como ModifError() são minhas funções personalizadas - elas apenas exibem uma mensagem de erro. Escreva, ao invés disso, suas próprias mensagens.

 
Obrigado .... Se me tivesse ajudado, eu não estaria fazendo esta pergunta .............
Razão: