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

 

Подскажите еще кто знает: 

депозит 10 000

риск 1%

стоп 200 пунктов

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

 
AndreyTrM #:

Подскажите еще кто знает: 

депозит 10 000

риск 1%

стоп 200 пунктов

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

еслибы вы торговали 1 лотом, то цена 1 _Point (прибыль/убыток) = Цена 1 тика * (Размер 1 тика / Размер 1 пункта). 

у вас таких пунктов 200, при торговле в 1 лот, вы потеряли бы : 200 * цена 1 пункта

в 1 лоте содержится LotSize монет

но вы готовы потерять только 10000 * 1 * Торговое_плечо / (1/100) монет.

может дальше уже сами посчитаете ?

 

Все понимаю, но если начал писать, ну напиши до конца, сделай доброе дело. 

в 1 лоте содержится LotSize монет - что за лотсайз, откуда ты его взял?..

единственное что я понял это вот это 

если бы вы торговали 1 лотом, то цена 1 _Point (прибыль/убыток) = Цена 1 тика * (Размер 1 тика / Размер 1 пункта).  

  // Получаем текущий символ
string symbol = _Symbol;
// Получаем текущую цену тика (цены шага)
double tickPrice = SymbolInfoDouble(symbol, SYMBOL_BID);
// Получаем размер одного тика (цены шага)
double tickSize = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
// Получаем размер одного пункта (цены шага)
double pointSize = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE);
// Рассчитываем стоимость одного _Point
double pointValue = tickPrice * (tickSize / pointSize);
Print("Стоимость одного _Point для символа ", symbol, " равна ", pointValue);

верно?

дальше 200 * pointValue.

10000 * 1 * Торговое_плечо / (1/100) монет.  - зачем тут на 1 умножать? Или 1 это  200 * pointValue.?

 
AndreyTrM #:

Все понимаю

   double Deposit=10000.0;
   double Persent=0.01;
   int StopPoint=200;
   Print(NormalizeDouble(Deposit*Persent/MarketInfo(_Symbol,MODE_TICKVALUE)/StopPoint,2));
 
AndreyTrM #:

Все понимаю, но если начал писать, ну напиши до конца, сделай доброе дело. 

в 1 лоте содержится LotSize монет - что за лотсайз, откуда ты его взял?..

единственное что я понял это вот это 

если бы вы торговали 1 лотом, то цена 1 _Point (прибыль/убыток) = Цена 1 тика * (Размер 1 тика / Размер 1 пункта).  

верно?

дальше 200 * pointValue.

10000 * 1 * Торговое_плечо / (1/100) монет.  - зачем тут на 1 умножать? Или 1 это  200 * pointValue.?

double tickSize=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICKSIZE); // размер тика 

double pointSize=SymbolInfoDouble(_Symbol,SYMBOL_POINT); // или _Point - размер 1-го пункта

double tickPoints = tickSize/pointSize;  // столько пунктов в одном тике

double lotSize=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE); // размер 1-лота, монет валюты базы котировки

double tickValue=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICKVALUE); // цена 1-го тика в валюте депозита при торговле 1 м лотом

double pointPrice=tickValue/tickPoints;   // цена в валюте депозита 1-го пункта _Point при торговле 1 лотом

long leverage = AccountInfoInteger(ACCOUNT_LEVERAGE) ; // предоставленное плечо..но это не точно :-)

double balance = AccountInfoDouble(ACCOUNT_BALANCE); // столько денег на балансе

 
AndreyTrM #:

Maxim Kuznetsov #:

Зачем в данной задаче кредитное плечо?

 

я без понятия, один фиг не могу допереть чё делать, половина не работает.

если я заменяю вот эту строчку 

MarketInfo(_Symbol,MODE_TICKVALUE)

на вот эту 

SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE_LOSS)
или
SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE_PROFIT)

тогда ответ 5, а должно быть 0.50 лота.

Maxim Kuznetsov из твоего ответа 

SYMBOL_TRADE_TICKSIZE, SYMBOL_TRADE_TICKVALUE 

mql5й не понимает такого.

а так спасибо за ответы.

 
AndreyTrM #:

я без понятия, один фиг не могу допереть чё делать, половина не работает.

если я заменяю вот эту строчку 

на вот эту 

тогда ответ 5, а должно быть 0.50 лота.

Maxim Kuznetsov из твоего ответа 

SYMBOL_TRADE_TICKSIZE, SYMBOL_TRADE_TICKVALUE 

mql5й не понимает такого.

а так спасибо за ответы.

Вы не уточнили что надо MQL5 я написал для 4.

Не знаю что Вы писали, но

      Print(10000*0.01/SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/200);


2023.11.13 19:54:40.133 Donchian_Channel (GBPUSD,M10)   0.5
2023.11.13 19:54:41.541 Donchian_Channel (GBPUSD,M10)   0.5
2023.11.13 19:54:41.608 Donchian_Channel (GBPUSD,M10)   0.5
2023.11.13 19:54:44.260 Donchian_Channel (GBPUSD,M10)   0.5
 
AndreyTrM #:

Maxim Kuznetsov из твоего ответа 

SYMBOL_TRADE_TICKSIZE, SYMBOL_TRADE_TICKVALUE 

mql5й не понимает такого.

а так спасибо за ответы.

Давайте немного помогу. Да, в двух местах пропущена нижняя черта. Небольшой косяк, но не в этом суть. Из кода, предоставленного Максимом Кузнецовым, сделал простенький скрипт. Скопируйте код, создайте новый шаблон скрипта, вставьте этот код, скомпилируйте и запустите его на любом графике, а затем во вкладке Эксперты терминала МТ5 посмотрите результаты. Может быть так лучше будет восприниматься информация.

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double tickSize=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE); // размер тика
   Print("Размер тика tickSize ",tickSize);
   double pointSize=SymbolInfoDouble(_Symbol,SYMBOL_POINT); // или _Point - размер 1-го пункта
   Print("_Point - размер 1-го пункта pointSize ",pointSize);
   double tickPoints = tickSize/pointSize;  // столько пунктов в одном тике
   Print("Столько пунктов в одном тике tickPoints ",tickPoints);
   double lotSize=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE); // размер 1-лота, монет валюты базы котировки
   Print("Размер 1-лота, монет валюты базы котировки lotSize ",lotSize);
   double tickValue=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE); // цена 1-го тика в валюте депозита при торговле 1 м лотом
   Print("Цена 1-го тика в валюте депозита при торговле 1 м лотом tickValue ",tickValue);
   double pointPrice=tickValue/tickPoints;   // цена в валюте депозита 1-го пункта _Point при торговле 1 лотом
   Print("Цена в валюте депозита 1-го пункта _Point при торговле 1 лотом pointPrice ",pointPrice);
   long leverage = AccountInfoInteger(ACCOUNT_LEVERAGE) ; // предоставленное плечо..но это не точно :-)
   Print("Предоставленное плечо leverage ",leverage);
   double balance = AccountInfoDouble(ACCOUNT_BALANCE); // столько денег на балансе
   Print("Столько денег на балансе balance ",balance);
  }
//+------------------------------------------------------------------+

С уважением, Владимир.

 

Всем доброго времени суток! 

Вопрос по тестеру МТ4. При тестировании 3 параметров (К3(час) , K1(стоп-лосс) , K2(тейк-профит)  с количеством проходов 140  на периоде 1 год тестер делает все 140 проходов соблюдая определенный порядок и последовательность проходов и выдает правильный результат. Сначала тестирует весь ЧАС(5) со всеми комбинациями СЛ и ТП, потом следующий час и так далее в том же алгоритме. 

А если с теми же параметрами количество проходов увеличивается до 210  , то тестер делает только 90 проходов , не соблюдая порядок и последовательность проходов как в примере выше, а делает проходы на первый взгляд в случайном порядке.

Подскажите пожалуйста, как при увеличении количества проходов, добиться от тестера правильных  и полных  результатов? И есть ли ограничения для тестера на количество проходов?
Компьютер у меня достаточно  мощный. ОС Win10 (Скрин на момент тестирования)

Спасибо

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