Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 229

 
splxgf:
Вроде проблем не вижу в данном участке, разве что BuyCount обнулить.


Обнуляю чуть выше. Этого не указано в скопированном участке.

Но вот советники со всех пар складывают туда свои ордера и из количества прорабатывают свою логику.

Не могу понять почему переменные ***Count у меня работают как глобальные.

На тестере логика исполняется.

На демо тоже исполняется. Две пары и более и все дружно исполняют одну логику.

 
Sepulca:


Скобочек недопоставили....


со скобками вроде все гуд.

Полный раздел выглядит так:

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:


со скобками вроде все гуд.

Полный раздел выглядит так:

if(OrderType()==OP_BUY) у Вас сработает для ордеров на любом символе и для любого магика! Я ж говорю скобочек не хватает!

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



 

Спасибо

Будем исправлять

 
День добрый. Подскажите кто понимает в статистике а то что то запутался. Мне нужно текущий ценовой ряд перевести в логарифмическую шкалу. Для этого мне нужно сделать только это вычисление и всё ?
for(int i=0; i<Bars-1; i++)
      {
      NewPrice[i]=MathLog(Close[i]);
      }
Вопрос возник по той причине, что везде читаю - посмотрите на график доуджонса за всю историю и посмотрите как вид на логарифмической шкале отличается от абсолютной. А у меня они визуально почти одинаковы, т.е. различия конечно есть но далеко не такие как на примерах.
 
Desead:
День добрый. Подскажите кто понимает в статистике а то что то запутался. Мне нужно текущий ценовой ряд перевести в логарифмическую шкалу. Для этого мне нужно сделать только это вычисление и всё ? Вопрос возник по той причине, что везде читаю - посмотрите на график доуджонса за всю историю и посмотрите как вид на логарифмической шкале отличается от абсолютной. А у меня они визуально почти одинаковы, т.е. различия конечно есть но далеко не такие как на примерах.


из справочника - MathLog ето натуральный логарифм - а вам по ходу нужно десятичный????

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


из справочника - MathLog ето натуральный логарифм - а вам по ходу нужно десятичный????


Десятичный не поможет. Вид от этого не изменится.
 

Помогите пожалуйста, найти либо код (думаю я не первый задавался такой проблематикой), либо алгоритм расчета следующих параметров:

Задача стоит следующая: в эксперте необходимо рассчитать уровень прибыли (как открытых, так и отложенных ордеров, которые будут открыты позднее) на определенном уровне цены (ну например на уровнях поддержки, сопротивления), как на определенном символе, так и по всем открытым позициям (по кросс-курсам прибыль планируется рассчитывать по текущим ценам).

Столкнулся со следующими проблемами:

как оказалось, размер лота у разных ДЦ разный (у instaforex он например 10 000 единиц базовой валюты, а не 100 000, как принято считать). Отсюда вопрос: как программно узнать размер лота в единицах валюты.

кроме того, не смог найти однозначной формулы расчета стоимости одного пункта (а из него соответственно и прибыли) и формулы перерасчета прибыли из базовой валюты (по кросс-курсам) в валюту депозита, как то все ДЦ по разному пишут.

С удовольствием почитал бы какую-нибудь статью по вопросу расчета прибыли и ее прогноза (киньте ссылку), т.к. чувствую у себя пробел в знаниях по этому вопросу (в голове если честно полная каша... стоимость пипса... кросс-курсы... где умножать на стоимость пипса, а где делить... бррррр... жуть)

 
неважно какой. Логарифм переводит абсолютные значения в относительные, и уж какое у него основание как я понял не имеет значения. Мне главное понять как правильно сделать чтобы увидеть в индикаторе процентное изменение цены.
 

Сегодня при использовании Веера Фибоначчи терминал 4-ки самозакрылся.

Ни ошибок, ни зависания, просто был терминал - просто исчез в следующую секунду.

Вопрос, как узнать причину этого чуда? Критические ошибки записываются в логи куда-то???

Причина обращения: