[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

[Eliminato]  
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
     }
[Eliminato]  
     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
[Eliminato]  
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
[Eliminato]  
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.