[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 581

 
Vovo4ka:

Perché il profitto preso, non quello che dovrebbe essere..... quando il lotto è chiuso, ma quando il profitto dovrebbe essere 30pp in profitto è scritto in un modo completamente diverso....


Cos'è questa sciocchezza: "essenzialmente calcolare la differenza tra l'apertura di un ordine e la sua chiusura) e summarise?????? ...

E su quali volumi, non è necessario saperlo? Il prezzo di un punto sarà diverso...

Il profitto non è calcolato in punti, ma in valuta, a seconda del volume delle posizioni scambiate.

 
Vovo4ka:

Per qualche motivo il profitto viene preso, non quello che dovrebbe essere..... quando il lotto viene chiuso, inversamente quando il profitto dovrebbe essere 30pp in profitto è scritto completamente diverso....


Il profitto dell'ordine non è in punti, ma nella valuta del deposito.

 

Corretto - qui la perdita totale (perdita) è calcolata dalla storia degli ordini LOCALI chiusi in perdita.

Questo è un po' diverso per voi, ma il principio è lo stesso.

//---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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;
               }
            }
         }
      }
   }
 
PapaYozh:


Il profitto dell'ordine non è in pip, ma nella valuta del deposito.


mi serve in pip, il lotto è fissato a 1.... ma il profitto o la perdita non corrisponde a quello reale..... e voglio calcolare il numero di pip in profitto e drawdown più facilmente e sommarlo e ottenere il risultato=)
 
Roman.:

Corretto - qui la perdita totale (perdita) è calcolata dalla storia degli ordini LOCALI chiusi in perdita.

Questo è un po' diverso per voi, ma il principio è lo stesso.


Grazie, me ne occuperò ora=)
 
Vovo4ka:

Mi serve in pip, il lotto è fissato a 1.... ma il profitto o la perdita non corrisponde a quello reale..... e voglio calcolare il numero di pip in profitto e drawdown più facilmente e sommarlo e ottenere il risultato=)


Ancora una volta:

Il profitto dell'ordine non è in pip, ma nella valuta del deposito.

 
Vovo4ka:

Ne ho bisogno in punti, il lotto è costante 1.... ma per qualche motivo il profitto o la perdita non corrisponde a quello reale.....per me voglio calcolare il numero di punti di profitto e drawdown più facile da sommare e ottenere il risultato =)

Bene, se il lotto è costante, dividete il profitto del tester per il punto. Otterrete il profitto in pip.
 

L'ultima funzione pubblicata da Kim, GetPotentialLossInCurrency (https://forum.mql4.com/ru/11287/page107), conta solo gli ordini aperti:

if (OrderType()==OP_BUY) {
                pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
              }
if (OrderType()==OP_SELL) {
                pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
              }
Ho cercato di estenderlo un po' per includere gli ordini in sospeso (semplicemente aggiungendo altri tipi):
if (OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP) {
                     pl+=(OrderOpenPrice()-OrderStopLoss())/po*OrderLots()*tv;
                     }
if (OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP) {
                     pl+=(OrderStopLoss()-OrderOpenPrice())/po*OrderLots()*tv;
                  }
ma gli ordini in sospeso non sono considerati. Sono contati in modo diverso? La documentazione non dice nulla di questo....
 
artmedia70:
Visualizza tutte le bandiere sul grafico con Comment` e vedrai perché il trade si apre.

l'ho messo, ora le transazioni non si aprono affatto.
File:
1_1.mq4  21 kb
 
Ivn:

L'ho inserito e ora non fa più alcuno sdek.

Perché l'hai fatto? Visualizza tutte le bandiere di un Commento in una volta sola.

Qui:

int start()
  {
//----


 RefreshRates();                        // Обновление данных
 Symb=Symbol();
 int cnt, ticket, total;
 int ABuy=0;                               // флаг на покупку /продажу   
 int ASell=0;   
 
   Comment(".....Вот сюда и пишите вывод всех флагов......");

 if (NewBar() == true)
{        
     x=x0; //передаем данные 
    x1=x01;
    x2=x02;