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

 
Sergey Fionin #:
Спасибо за совет. Но это не поможет. Нужно точное  изменение где то в реестре. Короче прошу откликнуться спеца по винде7

А вручную  файлы в этих папках создаются? 

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

Восстановиться...

 

Всем привет. Пишу функцию для расчёта фиксированного торгового  лота.

//---ФУНКЦИЯ РАСЧЁТА ФИКСИРОВАННОГО  ТОРГОВОГО ЛОТА НАЧАЛО----------------------------------------------------------------------------------------------+

double f__fix_lot(double param_fix_lot)
{//---СКОБКА ФУНКЦИИ РАСЧЁТА ТОРГОВОГО ЛОТА ОТКРЫВАЮЩАЯСЯ----------------------------------------------------------------------------------------------+
double lokal_lot= param_fix_lot; // ЛОТУ В ФУНКЦИИ ПРИСВАЕВАЕМ ЛОТ ПЕРЕДАННЫЙ В ФУНКЦИЮ
if(lokal_lot > max_lot) lokal_lot= max_lot; // ЕСЛИ ЛОКАЛ ЛОТО БЛЬШЕ МАКСИМАЛЬНО ВОЗМОЖНОГО ЛОТА ТО ПРИСВАЕМ ЛОТУ МАКСИМАЛЬНЫЙ ЛОТ
if(lokal_lot < min_lot) lokal_lot= min_lot; //ЕСЛИ ЛОКАЛ ЛОТ МЕНЬШЕ МИНИМАЬЛНО ВОЗМОЖНОГО ЛОТА Т ОПОКАЛ ЛОУ ПРИСВОЕВАЕМ МИНИМАЛЬНО ВОЗМОЖНЫЙ ЛОТ
return(lokal_lot);
}//---СКОБКА ФУНКЦИИ РАСЧЁТА ТОРГОВОГО ЛОТА ЗАКРЫВАЮЩАЯСЯ----------------------------------------------------------------------------------------------+

При использовании функции всё даже и работает, если лот ставлю сильно маленький то он пересчитывается в минимально возможный, а если сильно большой то пересчитывается в максимально возможный лот. Но  есть проблема следующего плана- если депозит к примеру 100 долларов в тесте, а я лот задам в 999999999999 то появляется ошибка OrderSend error 134- Недостаточно денег для совершения операции. Как функцию переделать так, чтобы если лот сильно большой  задал, то рассчитается максимально возможный лот для конкретного депозита?

 
DanilaMactep #:

Всем привет. Пишу функцию для расчёта фиксированного торгового  лота.

При использовании функции всё даже и работает, если лот ставлю сильно маленький то он пересчитывается в минимально возможный, а если сильно большой то пересчитывается в максимально возможный лот. Но  есть проблема следующего плана- если депозит к примеру 100 долларов в тесте, а я лот задам в 999999999999 то появляется ошибка OrderSend error 134- Недостаточно денег для совершения операции. Как функцию переделать так, чтобы если лот сильно большой  задал, то рассчитается максимально возможный лот для конкретного депозита?



input double Lots=0.2;
input double Prots=0.2;
// входные данные

double CheckMoneyForTrade()
  {

   RefreshRates();                              // Обновление данных
   double   Min_Lot=MarketInfo(Symbol(),MODE_MINLOT);        // Миним. колич. лотов
   double   Max_Lot=MarketInfo(Symbol(),MODE_MAXLOT);
   double   Free   =AccountFreeMargin();                 // Свободн средства
   double   CostOneLot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);// Стоимость 1 лота
   double   Step   =MarketInfo(Symbol(),MODE_LOTSTEP);       // Шаг изменен размера
   double   CostMinLot = CostOneLot * Min_Lot;      // Стоимость минимального лота
   double lts=0.0;
    
   if(Lots > 0)                                 // Если заданы лоты,то
      lts =Lots;                                // с ними и работаем
   else                                         // % свободных средств
      lts=MathFloor(Free*Prots/CostOneLot/Step)*Step;// Для открытия
   if(lang)Alert("Расчет лота ", lts," Min_Lot ",Min_Lot," Free Margin ",ND(Free)," Стоимость лота ",lts*CostOneLot," CostOneLot ",CostOneLot," Step ",Step);
   else Alert("Calc Lot ", lts," Min_Lot ",Min_Lot," Free Margin ",ND(Free)," Lts*CostOneLot ",lts*CostOneLot," CostOneLot ",CostOneLot," Step ",Step);
 
   if(lts > Max_Lot)
      lts=Max_Lot;
   if(lts < Min_Lot)
      lts=Min_Lot;               // Не меньше минимальн
  
  double   CostLts = lts*CostOneLot;                // Стоимость лота
   
    if(CostMinLot > Free)
     {
     if(lang) Alert("Не хватает средств на минимальный лот: Свободных средств ", ND(Free), " стоимость Мин Лота ", ND(CostMinLot));
     else Alert(" Not enough money for min lot:  Free Margin ",ND(Free)," Cost Min Lot ",ND(CostMinLot));
      Work=false;
      return(0.0) ; 
    }
    
   if(CostLts> Free)
   {
  if(lang) Alert("Стоимость лота больше свободных средств, уменьшим его: CostLts ",ND(CostLts)," Свободных средств ", ND(Free)  );
 else  Alert("The cost of the lot is more than available funds, we will reduce it: CostLts ",ND(CostLts)," Free Margin ", ND(Free)  );
 
 lts=MathFloor(0.9*Free/CostOneLot/Step)*Step;// Для открытия
 
  if(lang) Alert("Уменьшенный лот: Lot ", lts," Free Margin ",Free," стоимость лота ",lts*CostOneLot," CostOneLot ",CostOneLot," Step ",Step);
  else Alert("Reduce Lot ", lts," Free Margin ",Free," Cost lot ",lts*CostOneLot," CostOneLot ",CostOneLot," Step ",Step);
   }
  

   return(lts);
  }

double ND(double par)
  {
   par=NormalizeDouble(par,Digits);
   return(par);
  }
 

Так можно писать?

struct Node
{
    int featureIndex;
    double splitValue;
    Node* left;
    Node* right;
};  

Вот этот ChatGPT мне код такой даёт, а компилятор ругается - как ему на ошибку то указать?

class type expected, pointer to type 'Node' is not allowed      IsolationForest_V_01.mq5        23      9
undefined struct 'Node' cannot be used  IsolationForest_V_01.mq5        23      11
   see declaration of struct 'Node'     IsolationForest_V_01.mq5        19      8
class type expected, pointer to type 'Node' is not allowed      IsolationForest_V_01.mq5        24      9
undefined struct 'Node' cannot be used  IsolationForest_V_01.mq5        24      11
   see declaration of struct 'Node'     IsolationForest_V_01.mq5        19      8
4 errors, 0 warnings            5       1

К сожалению ничего не смыслю в ООП :(

 
Aleksey Vyazmikin #:

Так можно писать?

Вот этот ChatGPT мне код такой даёт, а компилятор ругается - как ему на ошибку то указать?

К сожалению ничего не смыслю в ООП :(

Как то странно, имя структуры вроде нельзя использовать для имени поля структуры. Это видимо из другого языка.
 
Aleksey Vyazmikin #:

Так можно писать?

Вот этот ChatGPT мне код такой даёт, а компилятор ругается - как ему на ошибку то указать?

К сожалению ничего не смыслю в ООП :(

Что и требовалось доказать))) А прикол в том, что NN не увидела различий м/у с++ или даже с и mql (лично для меня, так вполне ожидаемо), соответственно и код на нем сгенерила)
 
Valeriy Yastremskiy #:
Как то странно, имя структуры вроде нельзя использовать для имени поля структуры. Это видимо из другого языка.

Он пробовал и так

struct Node
{
    int featureIndex;
    double splitValue;
    Node left;
    Node right;
}; 

Я ему " что за тип "Node "? "

А он

"

Вы правы, ошибка компиляции возникает из-за того, что структура Node содержит поля left и right , которые ссылаются на экземпляры того же типа Node . Такая рекурсивная ссылка в структуре не допускается.

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

"
И так пару раз по кругу по сути. Чёт он не поймёт, что для MQL5 так нельзя.

Может кто может поправить его код? Если я тут выложу?

 
Vladimir Simakov #:
Что и требовалось доказать))) А прикол в том, что NN не увидела различий м/у с++ или даже с и mql (лично для меня, так вполне ожидаемо), соответственно и код на нем сгенерила)

В начале там был код ближе к C - со всякими массивами с указателями, я напомнил, что хочу код на MQL5, и вот выдал...

 
Vladimir Simakov #:
Что и требовалось доказать))) А прикол в том, что NN не увидела различий м/у с++ или даже с и mql (лично для меня, так вполне ожидаемо), соответственно и код на нем сгенерила)

Алексей там всего несколько вещей нужно понять, просто не по лениться

Владимир Симаков кстати таинственный специалист, иногда выскакивает
 
lynxntech #:

Алексей там всего несколько вещей нужно понять, просто не по лениться

Владимир Симаков кстати таинственный специалист, иногда выскакивает

Понять о чём, о СИ?

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