[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 18

 
Figar0 >> :

>> Metti tutto il codice là fuori, non c'è ancora odore di tappi qui...

Non si tratta di stopper, ma di chiudere una posizione non appena il prezzo tocca la MA

 
Novice писал(а) >>

Non si tratta di stoplot, ma di chiudere la posizione non appena il prezzo tocca la MA

Che sia così, sei stato tu a scrivere delle fermate...) Ma non riesco a capire perché non funziona senza il codice. Il pezzo sopra non è molto informativo.

 
Figar0 >> :

Così sia, sei stato tu a scrivere di tappi...). Tuttavia, senza il codice è impossibile capire perché non funziona, il pezzo postato è completamente disinformativo.

Devo essermi espresso molto male, mi scuso, volevo dire che lo stesso MA dovrebbe servire come stop-loss

>> :

... ... la posizione è stata chiusa non appena il prezzo ha toccato MA


E il codice è estremamente 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
     }

Penso già che le 4 condizioni possano essere cambiate in 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
     }

Poi è così) Comunque, è un pezzo delirante, i carri sono costruiti a prezzi Bid, e confrontarli così... Non lo so.

Qualcosa nel tuo codice, OrderSelect non vedere?

 

È standard, da un libro di testo:


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 per me capire se questo è possibile in linea di principio, perché quando viene testato in modalità di visualizzazione, gli ordini non si chiudono su MA
 
Novice писал(а) >>

Voglio sapere se è possibile farlo in linea di principio perché durante i test in modalità di visualizzazione, gli ordini non vengono chiusi su MA

In linea di principio è possibile. Avete un solo ordine possibile nel vostro sistema?

Prova a normalizzare i prezzi Bid/Ask e i valori MA per l'uguaglianza, è necessario...

Perché non usi il tuo Expert Advisor? L'avrei corretto molto tempo fa.

 
Figar0 >> :

In linea di principio è possibile. Avete un solo ordine possibile nel vostro sistema?

Prova a normalizzare i prezzi Bid/Ask e i valori MA per l'uguaglianza, è necessario...

Perché non usi il tuo Expert Advisor? L'avrei corretto molto tempo fa.

Dopo di che la mia testa ha iniziato a girare...

No) A un graal come ad altre galassie, solo tentativi di realizzare e migliorare TC.


Non ho potuto inserire tutto il codice nel post, quindi sto allegando

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

Dopo di che, la mia testa ha iniziato a girare...

No) Il Graal è come un'altra galassia, solo un tentativo di implementare e migliorare TC.

Non sono riuscito a mettere tutto il codice in questo post, quindi lo sto incollando qui.

Ma in linea di principio, in qualche modo funziona:

L'unica cosa che ho rimosso l'aumento del lotto. Non avevi detto che gli ordini non sono chiusi?

 
Non chiudono sul MA, esattamente quando il prezzo li tocca. Su MA2C e MA3C. Per quanto riguarda il divagare, sì, non l'ho ancora finito.


Quindi come...?

Figar0 >> :

...normalizzare i prezzi Bid/Ask e i valori MA quando si confrontano per l'uguaglianza...

Solo che non capisco esattamente come normalizzare... NormalizeDouble(Ask, Digits) ?

 

Il problema è attuale, mi sto ancora chiedendo come far chiudere gli ordini non appena il prezzo MA viene raggiunto.


Dopo la normalizzazione è uscito un errore durante la compilazione per qualche motivo, e nella parte del codice dove non è stato toccato affatto.