[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 391

 
Reshetov:

Nel tester e nel grafico, i file vengono scritti e letti in directory diverse:

  1. MetaTrader 4 ¤ tester ¤ esperti ¤ file
  2. MetaTrader 4 ¤ esperti

Yuri, rispetto! Ora l'ho capito e l'ho sistemato.

Zhunko, grazie. Ho provato in questo modo, ma ho ottenuto un errore del tipo can't read binary data from string file o qualcosa del genere. Comunque, la mia costruzione funziona.

 
snail09_1:

Imho, non creerei un array di ticket da chiudere, ma nel ciclo di enumerazione degli ordini a mercato controllerei ogni ordine alimentando il suo ticket all'input della funzione di chiusura con un controllo delle condizioni possibili.

Puoi mostrare questo nel codice?

Voglio dire, come può essere implementato?

[Deleted]  

Buon pomeriggio a tutti!

Forse questa domanda non è per i neofiti, ma non ho trovato un altro thread dove poter fare una domanda:

Come posso scaricare un rapporto dettagliato da MetaTrader 4 per avere il capitale sul grafico invece del saldo? Non so, se lo caricassi da MT4 o da qualche altro modo conveniente, sarebbe realistico? Non so se ho il giusto equilibrio o no, voglio solo sapere i risultati del drawdown.

Non ho idea di come usare questo broker.

[Deleted]  
belous:

Puoi mostrarlo in codice?

Voglio dire, come può essere implementato?

Qualcosa del genere?

int ticket;

for(int z=OrdersTotal()-1;z>=0;z--)
   {
   if(!OrderSelect(z,SELECT_BY_POS))
      {
      _GetLastError=GetLastError();
      Print(" OrderSelect(",z,",SELECT_BY_POS)-Error #",_GetLastError);
      continue;
      }
   if(OrderMagicNumber()==magic && OrderSymbol()==Symbol())
      {
      if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
          {
          // Проверим условие для закрытия, и если истинно          
              {
              ticket=OrderTicket();
              //Закрываем его
              }
           }
       }
    }
[Eliminato]  

aiuto per favore.

Ecco il codice


//-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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;
           

Non ho modo di fare un ciclo aperto quando un affare è stato chiuso in meno e se l'ordine successivo ha chiuso sopra lo zero, cioè saldo positivo, ma meno del negativo, aggiungiamo più al negativo e otteniamo un nuovo valore negativo, che è già meno.

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

Se è più negativo, secondo il segnale, chiudiamo l'ordine e ricominciamo il ciclo dall'inizio.


La situazione è che quando questo codice chiude l'affare in perdita, allora ricorda il saldo meno, e quando chiude l'affare nel più, e il più è meno del saldo, allora resetta Sum_Loss e ho bisogno che non si sia azzerato, e falciato.

Quindi è così che funziona ora:

controlla un ordine chiuso, se il profitto dell'ordine chiuso è inferiore a zero, allora questo profitto viene aggiunto a Sum_Loss, e così via fino a quando il profitto del trade aperto supera (sarà più di) Sum_Loss, quando raggiunto, il trade viene chiuso, e Sum_Loss viene azzerato e il ciclo inizia di nuovo.

Ho bisogno di:

ordine chiuso in meno, il suo profitto in meno è stato aggiunto a Sum_Loss, poi se l'affare successivo ha chiuso con un profitto positivo, Sum_Loss viene ridotto dell'importo derivato dal profitto, il che significa che il prossimo ordine aperto Sum_Loss è già un importo minore, e così via fino a quando il profitto dell'ordine è maggiore di Sum_Loss, e poi Sum_Loss viene cancellato e inizia un nuovo ciclo.

Somma_perdita = 0;

1° ordine chiuso: Profitto (-50) < 0

Somma_perdita + profitto (Somma_perdita + (-50))

Somma_perdita = -50;

2° ordine chiuso: Profit (+40) > 0 e Sum_Loss < 0

Somma_perdita + profitto (Somma_perdita + 40)

Somma_Perdita = -10


Forse la variabile Sum_Loss dovrebbe essere specificata come variabile negativa? in generale sono confuso. ho provato molte varianti, ma non ho ottenuto il risultato giusto. Ho provato un sacco di varianti e ancora non ottengo il giusto risultato.
 
Come posso testare un EA senza prendere in considerazione lo spread? È possibile?
[Deleted]  
Max79:
Come posso testare un EA senza prendere in considerazione lo spread? È possibile?
Cerca su Google e lo troverai, per esempio qui (set spread ? site:mql4.com) leggi: https://www.mql5.com/ru/forum/102224/page2
 

Chi ha un tacchino così?

 

Per favore, aiutatemi.

Ho messo un modificatore di ordini pendenti, nell'EA, e mi dà un errore - 1 quando provo nel Journal.

Cioè - "Se passo valori invariati come parametri di funzione, verrà generato l'errore 1 (ERR_NO_RSULT)".

Ho messo un controllo prima della modifica, ma non aiuta. Qual è l'errore? L'EA viene testato, ma come posso setacciare gli ordini con valori invariati?