Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 229

 
splxgf:
Je ne vois pas de problèmes dans ce domaine, sauf pour remettre BuyCount à zéro.


Je le mets à zéro juste au-dessus. Il n'est pas indiqué dans la section copiée.

Mais les EA de toutes les paires y empilent leurs ordres et élaborent leur logique à partir du montant.

Je ne comprends pas pourquoi mes variables ***Count fonctionnent comme des variables globales.

La logique fonctionne dans le testeur de stratégie.

Il fonctionne correctement sur la démo. Deux paires et plus, et toutes ensemble, elles exécutent la même logique.

 
Sepulca:


Les parenthèses sont manquantes....


Les supports semblent être OK.

La section complète ressemble à ceci :

void FindOrders()  
{
//--------------------------Стартовые данные---------------------------------------------
//Обьемы ордеров     //Количество ордеров   //Средение цены ордеров  //Прибыль ордеров
BuyLots =0;          BuyCount = 0;          BuyAP = 0;               BuyProfit = 0;
SellLots = 0;        SellCount = 0;         SellAP = 0;              SellProfit = 0; 
SellStopLots = 0;    SellStopCount = 0;     SellStopAP = 0;          SellStopProfit = 0; 
BuyStopLots = 0;     BuyStopCount = 0;      BuyStopAP = 0;           BuyStopProfit = 0; 
SellLimitLots = 0;   SellLimitCount = 0;    SellLimitAP = 0;         SellLimitProfit = 0; 
BuyLimitLots = 0;    BuyLimitCount = 0;     BuyLimitAP = 0;          BuyLimitProfit = 0; 
LotLastBuy = 0;      LotLastSell = 0;       BuyFirst =0;             SellFirst=0;
//--------------------------Окончание блока----------------------------------------------

//--------------------------Поиск ордеров------------------------------------------------
RefreshRates();
for(int cnt = 0; cnt < OrdersTotal(); cnt ++)                  //Для всехоткрытых ордеров
 {
  OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);      // Выбираем со всего масива ордеров
  if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)//Выбирам ордера експерта
   CommonProfit += OrderProfit()+OrderSwap();              // Подсчет совокупного профита
   if(OrderType()==OP_BUY)                                              
    {
     BuyTicket = OrderTicket();                                      // Сохранение тикета
     BuyLots += OrderLots();                                  // Общий обьем Всех позиций  
     BuyAP += OrderOpenPrice()*OrderLots();          // Средневзвешаная цена всех позиций  
     BuyLow = MathMin(BuyLow,OrderOpenPrice());                             // Нижний BUY     
     BuyFirst = MathMin(BuyFirst, OrderOpenTime());          // нахождение первой позиции 
     BuyLast = MathMax(BuyLast, OrderOpenTime());        // нахождение последнего позиции      
     BuyHigh = MathMax(BuyHigh, OrderOpenPrice());                         // Верхний BUY
     BuyProfit += OrderProfit()+OrderSwap();                           // Подсчет профита
     BuyCount++;                                                    // Количество ордеров
     LotLastBuy = MathMax(LotLastBuy, OrderLots());       // Поиск наибольшего объема BUY   
    }
   if (OrderType() == OP_SELL)
    {
     SellTicket = OrderTicket();                                     // Сохранение тикета
     SellLots += OrderLots();                                           // Подсчет объема
     SellAP += OrderLots()*OrderOpenPrice();                   // Вычисление средней цены
     SellFirst = MathMin(SellFirst, OrderOpenTime());        // нахождение первой позиции 
     SellLast = MathMax(SellLast, OrderOpenTime());         // нахождение позднего ордера
     SellHigh = MathMax(SellHigh, OrderOpenPrice());                      // Верхний SELL
     SellLow = MathMin(SellLow, OrderOpenPrice());                         // Нижний SELL
     SellProfit += OrderProfit()+OrderSwap();                          // Подсчет профита
     SellCount++;                                                   // Количество ордеров
     LotLastSell = MathMax(LotLastSell, OrderLots());    // Поиск наибольшего объема SELL   
    }           
   if (OrderType() == OP_SELLSTOP)
    {
     SellStopTicket  = OrderTicket();                                // Сохранение тикета
     SellStopLots += OrderLots();                                       // Подсчет объема
     SellStopAP += OrderLots()*OrderOpenPrice();               // Вычисление средней цены
     SellStopLast = MathMax(SellStopLast,OrderOpenTime());  // нахождение позднего ордера
     SellStopHigh = MathMax(SellStopHigh,OrderOpenPrice());               // Верхний SELL
     SellStopLow = MathMin(SellStopLow,OrderOpenPrice());                  // Нижний SELL
     SellStopProfit += OrderProfit()+OrderSwap();                      // Подсчет профита
     SellStopCount++;                                               // Количество ордеров
    }             
   if (OrderType() == OP_BUYSTOP)
    {
     BuyStopTicket = OrderTicket();                                  // Сохранение тикета
     BuyStopLots += OrderLots();                                        // Подсчет объема
     BuyStopAP += OrderLots()*OrderOpenPrice();                // Вычисление средней цены
     BuyStopLast = MathMax(BuyStopLast,OrderOpenTime());     //нахождение позднего ордера
     BuyStopHigh = MathMax(BuyStopHigh,OrderOpenPrice());                  // Верхний BUY
     BuyStopLow = MathMin(BuyStopLow, OrderOpenPrice());                    // Нижний BUY
     BuyStopProfit += OrderProfit()+OrderSwap();                       // Подсчет профита
     BuyStopCount++;                                                // Количество ордеров
    }             
   if (OrderType() == OP_SELLLIMIT)
    {
     SellLimitTicket = OrderTicket();                                // Сохранение тикета
     SellLimitLots += OrderLots();                                      // Подсчет объема
     SellLimitAP += OrderLots()*OrderOpenPrice();              // Вычисление средней цены
     SellLimitLast = MathMax(SellLimitLast,OrderOpenTime()); //нахождение позднего ордера
     SellLimitHigh = MathMax(SellLimitHigh,OrderOpenPrice());             // Верхний SELL
     SellLimitLow = MathMin(SellLimitLow, OrderOpenPrice());               // Нижний SELL
     SellLimitProfit += OrderProfit()+OrderSwap();                     // Подсчет профита
     SellLimitCount++;                                              // Количество ордеров
    }             
   if (OrderType() == OP_BUYLIMIT)
    {
     BuyLimitTicket = OrderTicket();                                 // Сохранение тикета
     BuyLimitLots += OrderLots();                                       // Подсчет объема
     BuyLimitAP += OrderLots()*OrderOpenPrice();               // Вычисление средней цены
     BuyLimitLast = MathMax(SellLimitLast,OrderOpenTime());  //нахождение позднего ордера
     BuyLimitHigh = MathMax(SellLimitHigh,OrderOpenPrice());               // Верхний BUY
     BuyLimitLow = MathMin(SellLimitLow, OrderOpenPrice());                 // Нижний BUY
     BuyLimitProfit += OrderProfit()+OrderSwap();                      // Подсчет профита
     BuyLimitCount++;                                               // Количество ордеров
    }
 }
//--------------------------Окончательное вычисление средних цен-------------------------

if (BuyLots != 0)       // Если есть ордера BUY, то вычисляется их средняя цена открытия
    BuyAP /= BuyLots;      

if (SellLots != 0)     // Если есть ордера SELL, то вычисляется их средняя цена открытия
    SellAP /= SellLots;      

 if (NormalizeDouble(MathAbs(BuyLots - SellLots), 3) != 0)// Если есть совокупная позиция
   {                                          // то вычисляется ее уровень безубыточности
    APrice = (BuyAP*BuyLots - SellLots*(SellAP - Spread))/(BuyLots - SellLots);  
    if (BuyLots > SellLots)                                   // Поправка для BUY - вверх
      APrice = MathCeil(APrice/Tick)*Tick;
     else                                                     // Поправка для SELL - вниз
      APrice = MathFloor(APrice/Tick)*Tick;
    if (BuyCount == 0)       // Если присутствуют только BUY, то совокупная цена равна их
      APrice = SellAP;                                                   //  средней цене
    if (SellCount == 0)     // Если присутствуют только SELL, то совокупная цена равна их
      APrice = BuyAP;                                                    //  средней цене
   }

}
//--------------------------Окончание блока----------------------------------------------
 
Limita:


Tout semble aller bien avec les parenthèses.

La section complète ressemble à ceci :

si(OrderType()==OP_BUY) vous l'avez fait fonctionner pour des commandes sur n'importe quel personnage et pour n'importe quel magicien ! Je vous ai dit qu'il n'y avait pas assez de supports !

  if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)//Выбирам ордера експерта ДЛЯ ДАННОГО IF
   CommonProfit += OrderProfit()+OrderSwap();              // Подсчет совокупного профита  СРАБАТЫВАЕТ ТОЛЬКО ЭТОТ ОПЕРАТОР
   if(OrderType()==OP_BUY)                                                              А ЭТО СРАБОТАЕТ БЕЗ УЧЁТА SYMBOL() И MAGIC



 

Merci.

Réparons-le.

 
Bon après-midi. Pouvez-vous conseiller quelqu'un qui comprend les statistiques, je suis confus. Je dois convertir la série de prix actuels en une échelle logarithmique. Pour cela, je ne dois faire que ce calcul et c'est tout ?
for(int i=0; i<Bars-1; i++)
      {
      NewPrice[i]=MathLog(Close[i]);
      }
La raison de cette question est que j'ai lu partout - regardez le graphique du Dow Jones pour toute l'histoire et voyez comment la vue sur l'échelle logarithmique diffère de l'échelle absolue. Et chez moi, ils sont visuellement presque identiques, c'est-à-dire qu'il y a des différences bien sûr, mais pas autant que dans les exemples.
 
Desead:
Bon après-midi. Veuillez indiquer qui comprend les statistiques, car je suis confus. J'ai besoin de convertir la série de prix actuels en échelle logarithmique. J'ai besoin de faire ce calcul seulement et tous ? La raison de cette question est que j'ai lu partout - regardez le graphique du Dow Jones pour toute l'histoire et voyez comment la vue sur l'échelle logarithmique diffère de l'échelle absolue. Et chez moi, ils sont visuellement presque identiques, c'est-à-dire qu'il y a des différences bien sûr, mais pas autant que dans les exemples.


d'après le manuel - MathLog est le logarithme naturel - mais vous semblez avoir besoin du logarithme décimal ? ???

for(int i=0; i<Bars-1; i++)
      {
      NewPrice[i]=MathLog(Close[i])/MathLog(10);
      }
 
ALXIMIKS:


du manuel - MathLog est le logarithme naturel - mais vous avez besoin de la décimale un ????


La décimale n'aide pas. Cela ne changera pas la vue.
 

Veuillez m'aider à trouver soit un code (je pense que je ne suis pas le premier à poser ce problème), soit un algorithme pour calculer les paramètres suivants :

Le problème est le suivant : dans Expert Advisor, il est nécessaire de calculer le niveau de profit (à la fois pour les ordres ouverts et en attente, qui seront ouverts plus tard) à un certain niveau de prix (par exemple, aux niveaux de support, de résistance), à la fois pour un certain symbole, et pour toutes les positions ouvertes (pour les taux croisés, il est prévu de calculer le profit aux prix actuels).

J'ai été confronté aux problèmes suivants :

Il s'est avéré que la taille du lot est différente pour les différentes sociétés de courtage (par exemple, instaforex a 10 000 unités monétaires de base, et non 100 000 comme il est considéré). D'où la question : comment connaître la taille du lot en unités monétaires.

C'est pourquoi je ne trouve pas de formule claire pour calculer la valeur d'un pip (et le profit correspondant) et pour convertir le profit de la devise de base (pour les taux croisés) à la devise du dépôt.

J`aimerais lire un article sur le calcul du bénéfice et sa prévision (envoyez-moi un lien), car je sens que je manque de connaissances sur le sujet (ma tête est en désordre ....). valeur des pépins... taux croisés... où multiplier par la valeur d'un pip et où diviser... brrrr... horrible)

 
peu importe lequel. Le logarithme traduit des valeurs absolues en valeurs relatives, et sa base n'a pas d'importance, d'après ce que je comprends. L'essentiel est de comprendre comment le faire correctement afin de voir le pourcentage de changement du prix dans l'indicateur.
 

Aujourd'hui, en utilisant l'éventail de Fibonacci, le terminal 4 s'est fermé.

Pas d'erreur, pas d'interruption, c'était juste le terminal - il a disparu la seconde suivante.

Question : comment trouver la cause de ce miracle ? Les erreurs critiques sont-elles enregistrées quelque part ?