[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 390

 

Boa tarde. Pergunta sobre a função SendMail padrão ... A fimde entender como a função funciona, escrevi este roteiro:

//+------------------------------------------------------------------+
//|                                             функция_SendMail.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//+------------------------------------------------------------------+

SendMail("Скрипт Функция_SendMail","Webmoney - идите в жопу!!!!");
Alert(GetLastError());
   
//+------------------------------------------------------------------+   
   return(0);
  }
//+------------------------------------------------------------------+

Ao ser executado na janela do terminal do cliente, um erro aparece no registro:

Nas configurações (menu do terminal do cliente Ferramentas -> Configurações -> guia Correio) são definidos os seguintes parâmetros:

Onde ao invés de três pontos nos campos SMTP login e De Quem há um nome daquela caixa de correio da qual eu quero enviar mensagem, e no campo Para - nome da caixa de correio para a qual eu quero enviar mensagem.

Ao mesmo tempo, onúmero da porta especificado nocampoSMTP Server é realmente 25:

Nota: a captura de tela foi feita na seção de Ajuda do Correio.Ru.

Pergunta: o que é este erro e como se livrar dele? O compilador não detecta erros e a função GetLastError() retorna 0.

P.S. A fim de não desorganizar o fórum, obrigado antecipadamente por sua resposta.

 
7777877:

Boa tarde. Pergunta sobre a função SendMail padrão ... A fimde entender como a função funciona, escrevi este roteiro:

Ao ser executado na janela do terminal do cliente, um erro aparece no registro:

Nas configurações (menu do terminal do cliente Ferramentas -> Configurações -> guia Correio) são definidos os seguintes parâmetros:

Onde ao invés de três pontos nos campos SMTP login e De Quem há um nome daquela caixa de correio da qual eu quero enviar mensagem, e no campo Para - nome da caixa de correio para a qual eu quero enviar mensagem.

Ao mesmo tempo, onúmero da porta especificado nocampoSMTP Server é realmente 25:

Nota: a captura de tela foi feita na seção de Ajuda do Mail.Ru.

Pergunta: qual é esse erro e como se livrar dele? O compilador não mostra erros e a função GetLastError() retorna 0.

P.S. A fim de não desorganizar o fórum, obrigado antecipadamente por sua resposta.

Olhe a porta e a criptografia. Talvez você devesse fixá-lo em 2525.
 

ajude, por favor.

Aqui está o código


//-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
        if(BuyLots  > SellLots)money = BuyLots * 10;
        if(BuyLots  < SellLots)money = SellLots * 10;
  if (((AccountEquity() + Sum_Loss + (Sum_Loss / money)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           

Não tenho como abrir um loop quando um negócio foi fechado em menos e se o próximo pedido for fechado acima de zero, ou seja, saldo positivo, mas menos que negativo, adicionamos mais ao negativo e obtemos um novo valor negativo, que já é menor.

if(OrderProfit() >= 0 && Sum_Loss < 0.0)
                  double lastLoss_two = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss_two;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
               }

Se for mais negativo, de acordo com o sinal, fechamos a ordem e iniciamos o ciclo desde o início.


A situação é que quando este código fecha o negócio em prejuízo, então ele se lembra do saldo negativo, e quando fecha o negócio no mais, e o mais é menor que o saldo, então ele redefine Sum_Loss e eu preciso que ele não seja zerado, e cortado para baixo.

Portanto, é assim que funciona agora:

ele verifica uma ordem fechada, se o lucro da ordem fechada for menor que zero, então este lucro é adicionado à Soma_Perda, e assim por diante até que o lucro do comércio aberto exceda (será mais que) Soma_Perda, quando alcançado, o comércio é fechado, e a Soma_Perda é zerada e o ciclo começa novamente.

Eu preciso:

ordem fechada em menos, seu lucro negativo foi adicionado ao Sum_Loss, então se o próximo negócio fechado com um lucro positivo, o Sum_Loss é reduzido pelo montante recebido do lucro, o que significa que o próximo pedido aberto Sum_Loss receberá um montante menor, e assim por diante, até que o lucro do pedido seja maior que o Sum_Loss, e então o Sum_Loss é zerado e um novo ciclo começa.

Soma_Perda = 0;

1ª ordem fechada: Lucro (-50) < 0

Soma_Perda + lucro (Soma_Perda + (-50))

Soma_Perda = -50;

2ª ordem fechada: Lucro (+40) > 0 e Soma_Perda < 0

Soma_Perda + lucro (Soma_Perda + 40)

Soma_Perda = -10
 
7777877:

Boa tarde. Pergunta sobre a função SendMail padrão ... A fimde entender como a função funciona, escrevi este roteiro:

Ao ser executado na janela do terminal do cliente, um erro aparece no registro:

Nas configurações (menu do terminal do cliente Ferramentas -> Configurações -> guia Correio) são definidos os seguintes parâmetros:

Onde ao invés de três pontos nos campos SMTP login e De Quem há um nome daquela caixa de correio da qual eu quero enviar mensagem, e no campo Para - nome da caixa de correio para a qual eu quero enviar mensagem.

Ao mesmo tempo, onúmero da porta especificado nocampoSMTP Server é realmente 25:

Nota: a captura de tela foi feita na seção de Ajuda do Correio.Ru.

Pergunta: qual é esse erro e como se livrar dele? O compilador não mostra erros e a função GetLastError() retorna 0.

P.S. Para evitar lixo no fórum, obrigado antecipadamente por sua resposta.

ajuda

o servidor smtp.mail.ru:25 realmente funciona

 
YOUNGA:

ajuda

O servidor smtp.mail.ru:25 realmente funciona.

Meu login de teste, de quem, para quem, combina.

Talvez as firewalls estejam atrapalhando?

Oh, cara, isso é um milhão de dicas - reinicie o terminal!


 

Ajudar as pessoas

Eu coloquei um pedido pendente pelo preço x. A ordem é convertida em uma ordem de mercado a preço Y. Posso descobrir em algum lugar a que preço a ordem pendente foi colocada (no diário ...ou ) ou terei que escrever minha própria matriz

 

Boa noite!

Por favor, me informe sobre a possível fonte do erro. Estou apenas aprendendo a língua, por isso estou um pouco perplexo.

A tarefa no código Expert Advisor é ler os dados do arquivo .scv (dois valores em uma linha, 400 linhas) e escrevê-los em um array.

double signals_array[400][2];

int init()
  {

   int Handle;
      Handle=FileOpen("Signals.csv",FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
      {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла");//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла");//..такое сообщ
         PlaySound("Bzrrr.wav");          // Звуковое сопровождение
         return;                          // Выход из start()      
      }

   for (int i = 0; i < 400; i++)
      {
      for (int j = 0; j < 2; j++)
         signals_array[i][j] = StrToDouble(FileReadString(Handle));
      }

Alert (signals_array[120][0],"; ",signals_array[0][1]," OK!");
//----
   return(0);
  }

O problema é o seguinte: se eu atirar o EA em um gráfico, ele imprime um alerta com os valores corretos da matriz, mas se eu tentar testar o EA, ele imprime um alerta "Nenhum arquivo" no registro. Ou seja, parece não poder acessar o arquivo (embora seja inacreditável) e escreve valores na matriz (o que é confirmado por outro alerta), mas fica preso ao encontrar o arquivo, de acordo com o registro. Confuso. Abaixo está uma captura de tela.

 

alexeymosc:

O problema é o seguinte: se eu jogar o Expert Advisor no gráfico, ele emite um alerta com os valores corretos da matriz, mas se eu tentar testar o Expert Advisor, ele emite o alerta "Nenhum arquivo" no registro. Ou seja, parece não poder acessar o arquivo (embora seja inacreditável) e escreve valores em um array (isso é confirmado por outro alerta), mas congela ao encontrar um arquivo no log. Confuso.


No testador e no gráfico os arquivos são escritos e lidos em diferentes diretórios:

  1. MetaTrader 4\tester (arquivos de especialistas)
  2. Arquivos MetaTrader 4\peritos
 
alexeymosc:

Boa noite!

Por favor, me informe sobre a possível fonte do erro. Estou apenas aprendendo a língua, por isso estou um pouco perplexo.

A tarefa no código Expert Advisor é ler os dados do arquivo .scv (dois valores em uma linha, 400 linhas) e escrevê-los em um array.

O problema é o seguinte: se eu atirar o EA em um gráfico, ele imprime um alerta com os valores corretos da matriz, mas se eu tentar testar o EA, ele imprime um alerta "Nenhum arquivo" no registro. Ou seja, parece não poder acessar o arquivo (embora seja inacreditável) e escreve valores na matriz (o que é confirmado por outro alerta), mas fica preso ao encontrar o arquivo, de acordo com o registro. Confuso. Abaixo está uma captura de tela.

Se um arquivo estiver aberto, ele deve ser fechado, mesmo se for recebido um erro ao trabalhar com ele. Não vejo mais nenhum erro até agora.

Pode ser lido desta forma:

signals_array[i][j] = FileReadDouble(Handle);
 
Reshetov:

No testador e no gráfico, os arquivos são escritos e lidos em diferentes diretórios:

  1. MetaTrader 4\tester (arquivos de especialistas)
  2. Arquivos MetaTrader 4\peritos

Yuri, respeito! Agora eu o entendi e o consertei.

Zhunko, obrigado. Tentei dessa forma, mas recebi um erro algo como não conseguir ler dados binários de um arquivo string ou algo do gênero. De qualquer forma, minha construção funciona.

Razão: