[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 18

 
Figar0 >> :

>> Coloque todo o código lá fora, ainda não há cheiro de rolhas aqui...

Não se trata de rolhas, trata-se de fechar uma posição assim que o preço toca o MA

 
Novice писал(а) >>

Não se trata de stoplots, trata-se de fechar a posição assim que o preço tocar o MA

Que assim seja, foi você quem escreveu sobre as paradas...) Mas não consigo entender porque não funciona sem o código. A peça acima não é muito informativa.

 
Figar0 >> :

Seja como for, foi você quem escreveu sobre rolhas...). Mesmo assim, sem o código é impossível entender por que não funciona, a peça postada é completamente não-informativa.

Eu devo ter me expressado muito equivocadamente, peço desculpas, eu quis dizer que a própria MA deveria servir como uma parada para a perda

>> :

... ... a posição foi fechada assim que o preço tocou MA


E o código é extremamente primitivo:


         Ticket=OrderTicket();                 
         Tip   =OrderType();                   
         Lot   =OrderLots();                   

    MA2C=iMA(NULL,0, Period_MA2,0,MODE_SMA,PRICE_CLOSE,0); //Есть две MA с разным периодом.
    MA3C=iMA(NULL,0, Period_MA3,0,MODE_SMA,PRICE_CLOSE,0); //И вот с такими параметрами.
     
     //Так же есть условия, при которых по идее должны срабатывать 
     // функции закрытия ордеров.
     
     RefreshRates();                  
    if ( Tip==0 && Bid== MA2C)        //Обозначение типа ордера и условия закрытия
     {
      CloseBuy=true;                              // Закрыть Buy
     }
     RefreshRates();
    if ( Tip==0 && Bid== MA3C)
     {
      CloseBuy=true;                              // Закрыть Buy
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA2C)
     {
      CloseSell=true;                               // Закрыть Sell
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA3C)
     {
      CloseSell=true;                               // Закрыть Sell
     }

        // Закрытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if ( Tip==0 && CloseBuy==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ", Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         ALERT=OrderClose( Ticket, Lot,Bid,3,Blue);      // Закрытие Buy
         if ( ALERT==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Buy ", Ticket);
            break;                              // Выход из цикла закр
           }
         if ( Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
        if ( Tip==1 && CloseSell==true)                // Открыт ордер Sell..
        {                                       // и есть критерий закр
         Alert("Попытка закрыть Sell ", Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         ALERT=OrderClose( Ticket, Lot,Ask,3,Red);      // Закрытие Sell
         if ( ALERT==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Sell ", Ticket);
            break;                              // Выход из цикла закр
           }
         if ( Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }

Eu já acho que 4 condições podem ser mudadas para 2


     RefreshRates();
    if ( Tip==0 && Bid== MA2C || Tip==0 && Bid== MA3C)
     {
      CloseBuy=true;                              // Критерий закр. Buy
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA2C || Tip==1 && Ask== MA3C)
     {
      CloseSell=true;                               // Критерий закр. Sell
     }
 
     RefreshRates();
    if ( Tip==0 && (Bid== MA2C  || Bid== MA3C))
     {
      CloseBuy=true;                              // Критерий закр. Buy
     }
     RefreshRates();
    if ( Tip==1 && (Ask== MA2C ||  Ask== MA3C))
     {
      CloseSell=true;                               // Критерий закр. Sell
     }

Então é assim) De qualquer forma, é uma peça ilusória, os vagões são construídos a preços de Licitação e para compará-los assim... Eu não sei.

Algo em seu código, OrderSelect não vê?

 

É o padrão, a partir de um livro didático:


Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect( i-1, SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!= Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if ( Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }

//И далее как выше...
É importante para mim entender se isso é possível em princípio, porque quando testado no modo de visualização, os pedidos não fecham no MA
 
Novice писал(а) >>

Quero saber se é possível fazer isso em princípio porque durante os testes em modo de visualização, as ordens não são fechadas no MA

Em princípio, isso é possível. Você só tem uma única ordem possível em seu sistema?

Tente normalizar os preços de Licitações/Propostas e os valores de MA para igualdade, é necessário...

Por que você não usa seu Expert Advisor? Eu o teria corrigido há muito tempo.

 
Figar0 >> :

Em princípio, isso é possível. Você só tem uma única ordem possível em seu sistema?

Tente normalizar os preços de Licitações/Propostas e os valores de MA para igualdade, é necessário...

Por que você não usa seu Expert Advisor? Eu o teria corrigido há muito tempo.

Depois disso, minha cabeça começou a girar...

Não) Para um graal como para outras galáxias, apenas tentativas de realizar e melhorar TC.


Eu não consegui colocar todo o código no correio, então estou anexando

Arquivos anexados:
g.ei.vn.gl..mq4  12 kb
 
Novice писал(а) >>

Depois disso, minha cabeça começou a girar...

Não) O Graal é como outra galáxia, apenas uma tentativa de implementar e melhorar a TC.

Eu não consegui colocar todo o código neste posto, então estou colando aqui.

Mas, em princípio, funciona de alguma forma:

A única coisa que removi foi o aumento do lote. Pensei que você tinha dito que as ordens não estão fechadas?

 
Eles não fecham no MA, exatamente quando o preço os toca. Em MA2C e MA3C. Sobre a divagação, sim, eu ainda não terminei.


Então, como...?

Figar0 >> :

...normalizar os preços de Licitação/Ask e os valores de MA ao comparar para igualdade...

Só não entendo bem como normalizar... NormalizeDuplo(Pergunte, Dígitos) ?

 

O problema é atual, ainda me pergunto como conseguir que as encomendas sejam fechadas assim que o preço de MA for alcançado.


Após a normalização, por algum motivo, um erro saiu durante a compilação, e na parte do código onde não foi tocado de forma alguma.