[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?

 

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.

 
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();
              //Закрываем его
              }
           }
       }
    }
 

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?
 
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?

 
Motivazione: