[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 497

 
fmillion:
'' - unexpected end of program G:\work\MetaTrader Group\experts\Balista.mq4 (576, 1)

Тыкаю мышкой - перемещает на место с коментами (( ... как быть ? 


Самый простой способ поиска ошибки - волшебная кнопочка в МетаЭдиторе "Отменить". И после очередной отмены, снова пытаться скомпилировать код.
 
Доброго дня! Скажите. Я допустим буду использовать 
double iMA(     string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

В справке написано timeframe     -     Период. Может быть одним из периодов графика. 0 означает период текущего графика.

 

Так может, или это точно полюбому  период графика? А вот если я там впишу не 15, а 20??    И писать лучше всё-таки цифрой, или лучше PERIOD_M15?  

 

Ладно, вписал там 0 и не морочусь. 

 

Всем доброго дня. Буду очень признателен, если кто-нибудь сможет вставить звук в этот индикатор.

Т.е. при пересечении машек.... и конечно же звук должен быть только один раз при закрытии свечи, на которую данное пересечение выпало.

Заранее спасибо за помощь.

Файлы:
 
Dimka-novitsek:
Доброго дня! Скажите. Я допустим буду использовать 

В справке написано timeframe     -     Период. Может быть одним из периодов графика. 0 означает период текущего графика.

 

Так может, или это точно полюбому  период графика? А вот если я там впишу не 15, а 20??    И писать лучше всё-таки цифрой, или лучше PERIOD_M15?  

 

Ладно, вписал там 0 и не морочусь. 

  Период задаётся в минутах. Например, 60 - час, 240 - 4 часа... итд, 5 - М5.
 

Не нашел у  KimIV функцию возврата размера просадки/профита из последнего закрытого ордера.

Идея проста: нужно отследить сколько в валюте депозита получились Профит или Просадка в последнем закрытом ордере. 

 
fmillion:

Не нашел у  KimIV функцию возврата размера просадки/профита из последнего закрытого ордера.

Идея проста: нужно отследить сколько в валюте депозита получились Профит или Просадка в последнем закрытом ордере. 

У меня такая конструкция работает:

//---Поиск крайнего отработавшего ордера для открытия очередной позиции ---   
   for (orderIndex = (OrdersHistoryTotal() - 1); orderIndex >= 0; orderIndex--)
   {   
      if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY)) {Print("Ошибка при доступе к исторической базе (",GetLastError(),")");continue;}   
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))  continue;              
   //------------------------- Принимаем в расчет только ордер, закрытый cамым крайним -----------------------
      if (time<OrderCloseTime())     //(сравниваем его с хранящимся в пероеменной time) 
        {
         time=OrderCloseTime();     //если время закрытия ордера больше - ложим его в переменную     
         int lastType = OrderType();
         double lastLots = OrderLots();
         double lastProfit = OrderProfit() + OrderSwap();
         
         // Анализ только что закрывшегося ордера      
         if (lastProfit >= 0.0)
         {
...
 
Roman.:

У меня такая конструкция работает:

а чему равна переменная time в начале цикла ?
 
fmillion:

Не нашел у  KimIV функцию возврата размера просадки/профита из последнего закрытого ордера.

Идея проста: нужно отследить сколько в валюте депозита получились Профит или Просадка в последнем закрытом ордере. 

Алгоритм такой: ищите там же ЛЮБУЮ функцию, возвращающую НЕ ВАЖНО что у последнего закрытого ордера. Получаете Тикет этого последнего закрытого ордера. По выходе из цикла перебора ордеров, выделяете ордер по полученному Тикету и считаете его профит, если важно, не забываете при подсчёте учесть своп и комисссию:

    Profit = OrderProfit() + OrderSwap() + OrderCommission();
 

Инфо из учебника:

int ObjectGetShiftByValue( string name, double value)
Функция вычисляет и возвращает номер бара (смещение относительно текущего бара) для указанной цены. Номер бара вычисляется при помощи линейного уравнения по первой и второй координатам. Применяется для трендовых линий и аналогичных объектов. Для получения информации об ошибке необходимо вызвать функцию GetLastError().
См. также ObjectGetValueByShift().
Параметры:
name - Имя объекта.
value - Значение цены.
Пример:
  int shift=ObjectGetShiftByValue("MyTrendLine#123", 1.34);

 Вопрос:

 Где здесь ошибка, выдает сообщение номер бара -1(я это самый первый бар в истории). Больше инфо в учебнике не нашел. Как узнать номер бара по цене?

//=============================================================
int bar;
double cena;
//=============================================================
int start(){
cena=1.3020;
bar=ObjectGetShiftByValue("bar",cena);
if(bar==0){Alert("Ошибка = ",GetLastError());}
else if(bar!=0){Alert("Номер бара = ",bar);}}
//============================================================
 
TarasBY:

Алгоритм такой: ищите там же ЛЮБУЮ функцию, возвращающую НЕ ВАЖНО что у последнего закрытого ордера. Получаете Тикет этого последнего закрытого ордера. По выходе из цикла перебора ордеров, выделяете ордер по полученному Тикету и считаете его профит, если важно, не забываете при подсчёте учесть своп и комисссию:

Спасибо за содержательный ответ. Уже сам догадался ))