Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 582

 

Добрый день.

Весь мозг сломал почему не работает следующий алгоритм. Не передаёт массив в функцию. Сначала долго искал причину, но вот удалось её локализовать в таком тестовом примере.

Сообщает:  "Cannot find 'functest' in 'TestLib.ex4' " потом "unresolved import function call."

Содержимое файла Test.mq4

#property strict
#include <TestLibx.mqh>

int mass [5];

int OnInit()  {   return(INIT_SUCCEEDED); }
void OnDeinit(const int reason)  {  }

void OnTick()
  {
   functest (mass);
   int c=0;
   for (c=0;c<5;c++) Print ( " mass[",c,"]=",mass[c]," ");
   Sleep(2000);
  }

Содержимое файла библиотеки TestLibx.mq4

#property library
#property strict
void functest (int &massx[])
{
int c=0;
     while (c<5)
     {
     massx[c]=MathRand();
     c++;
     }
     return;
}
Содержимое файла библиотеки TestLibx.mqh

#property strict
 #import "TestLibx.ex4"
   void functest (int &massx[]);
 #import

Оригинальные файлы прикрепил в архив.

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

Спасибо.

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Дифференциальный индикатор Султонова Уважаемые...
Файлы:
MQL4.zip  11 kb
 
Alexey Viktorov:
Разница значений больше 10*Point, но надо учесть будет положительная или отрицательная разность.

Спасибо. Хочу перевести в пункты своп и комиссию. Что не так?

double OrderSwap_Commission(int mn=-1)
  {
   int i=0;
   double sum=0,lots=0;
   double pips=0;//своп, комисся в пунктах
   for(i=0; i<OrdersTotal(); i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=mn) continue;
      if(OrderType()==OP_SELL || OrderType()==OP_BUY)
        {
         lots=lots+OrderLots();
         sum=sum+OrderSwap()+OrderCommission();
        }
     }
   if(lots!=0)
     {
      pips=NormalizeDouble(MathAbs((sum)/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/lots))*_Point,_Digits);
      pips=(MathRound(pips*MathPow(10,Digits)))/MathPow(10,Digits);
     }
   return(pips);
  }
//


 

 
bij:

Спасибо. Хочу перевести в пункты своп и комиссию. Что не так?

int  pipsProfitOrder = (int)MathFloor( ( OrderProfit() + OrderSwap() + OrderCommission() ) / (SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );
 
Konstantin Nikitin:

Спасибо.

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

 
bij:

Спасибо.

Оп, что то вы изменили ответ, мне не нужно знать профит. Своп и комиссию.

Просто у вас деление на лотность, а нужно умножать.

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()

Сам принцип показал какой использую. А применить к вашему коду довольно просто.

 
Konstantin Nikitin:

Просто у вас деление на лотность, а нужно умножать.

Сам принцип показал какой использую. А применить к вашему коду довольно просто.

Понятно, спасибо.
 

Здравствуйте!

Вопрос: Индикатор создает графические объекты(OBJ_ARROW), но часть из них появляется только после компиляции или смены тайм-фрейма. Ошибок и предупреждений при компиляции нет. В тестере Print("Ошибка при вызове ObjectCreate():",GetLastError());0,  Print("Ошибка при вызове ObjectCreate():",GetLastError());4200. 

Если вам не трудно ответьте чайнику!

 
А как в тестере программно подгрузить котировки по другому таймфрейму (меньшему)?
 
Juer:
А как в тестере программно подгрузить котировки по другому таймфрейму (меньшему)?
Старший тф строится по данным младшего. Значит - не нужно.
 
bij:
Закрывайте позицию если текущее время = время открытия позиции плюс 5 минут или на открытии нового бара, если период графика М5.

Спасибо. Стало лучше. Но теперь другая незадача. Тестер постоянно выдаёт 100% результативность. Но так ведь не бывает. Открывается много сделок, они нормально теперь закрываются через указанное время согласно журналу. Но на графике результата тестирования, где видно моменты открытия и закрытия позиций, естественно, далеко не все сделки прибыльные. С чем может быть связана такая левая стопроцентность?

Артёму тоже спасибо!

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