Например перед входом в сделку вычисляем стоплосс, допустим он равен 50 пунктов и желаем рискнуть не более чем 200 баксами. Вот эти 2 параметра загняем в функцию, которая вычисляет необходимый при этом размер лота.
200/(MarketInfo(Symbol(),MODE_TICKVALUE)*(50+MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_POINT)))
Здравствуйте.
double avd.OperationVolume ;
string avs.Symbol = "EURUSD" ;
double avd.VARLimit = 200.00 ;
int avi.VARPoints = 50 ;
int avi.Command = OP_BUY ;
//<init>
int init
(//<0>
){//<1>
avd.OperationVolume = amd.OperationVolume ( avs.Symbol , avd.VARLimit , avi.VARPoints , avi.Command ) ;
}//</init>
//<amd.OperationVolume>
double amd.OperationVolume
(//<4>
string aas.Symbol ,
double aad.VARLimit ,
int aai.VARPoints ,
int aai.Command
){//<24>
double ald.VolumeStep = MarketInfo ( aas.Symbol , MODE_LOTSTEP ) ;
double ald.MinimalVolume = MarketInfo ( aas.Symbol , MODE_MINLOT ) ;
double ald.NominalLot = MarketInfo ( aas.Symbol , MODE_LOTSIZE ) ;
double ald.NominalMargin = MarketInfo ( aas.Symbol , MODE_MARGINREQUIRED ) ;
double ald.NominalTick = MarketInfo ( aas.Symbol , MODE_TICKVALUE ) ;
double ald.QuoteTick = MarketInfo ( aas.Symbol , MODE_TICKSIZE ) ;
double ald.QuotePoint = MarketInfo ( aas.Symbol , MODE_POINT ) ;
double ald.MinimalMargin = ald.NominalMargin * ald.MinimalVolume ;
double ald.MinimalTick = ald.NominalTick * ald.MinimalVolume ;
double ald.MinimalPoint = ald.MinimalTick * ald.QuotePoint / ald.QuoteTick ;
int ali.PositionPoints = MathRound ( ald.MinimalMargin / ald.MinimalPoint ) ;
double ald.VARPositions = aai.VARPoints * 1.0 / ali.PositionPoints ;
double ald.MarginLimit = avd.VARLimit / ald.VARPositions ;
double ald.VolumeLimit = ald.MarginLimit / ald.NominalMargin ;
double ald.OperationVolume = 0 ;
if ( ald.VolumeLimit >= ald.MinimalVolume )
{ int ali.Steps = MathFloor ( ( ald.VolumeLimit - ald.MinimalVolume ) / ald.VolumeStep ) ;
ald.OperationVolume = ald.MinimalVolume + ald.VolumeStep * ali.Steps ; }
Alert ( " " ) ;
Alert ( "ald.OperationVolume = " , ald.OperationVolume , " " , "lots" ) ;
Alert ( "Output :" ) ;
Alert ( " " ) ;
Alert ( "ald.MinimalVolume = " , ald.MinimalVolume , " " , "lots" ) ;
Alert ( "ald.VolumeStep = " , ald.VolumeStep , " " , "lots" ) ;
Alert ( "ald.VolumeLimit = " , ald.VolumeLimit , " " , "lots" ) ;
Alert ( "ald.MarginLimit = " , ald.MarginLimit , " " , AccountCurrency () ) ;
Alert ( "aad.VARLimit = " , aad.VARLimit , " " , AccountCurrency () ) ;
Alert ( "ald.VARPositions = " , ald.VARPositions , " " , "positions" ) ;
Alert ( "aai.VARPoints = " , aai.VARPoints , " " , "points" ) ;
Alert ( "ali.PositionPoints = " , ali.PositionPoints , " " , "points" ) ;
Alert ( "ald.MinimalPoint = " , ald.MinimalPoint , " " , AccountCurrency () ) ;
Alert ( "ald.MinimalMargin = " , ald.MinimalMargin , " " , AccountCurrency () ) ;
Alert ( "Processing :" ) ;
Alert ( " " ) ;
Alert ( "aai.Command = " , aai.Command ) ;
Alert ( "aai.VARPoints = " , aai.VARPoints , " " , "points" ) ;
Alert ( "aad.VARLimit = " , aad.VARLimit , " " , AccountCurrency () ) ;
Alert ( "aas.Symbol = " , aas.Symbol ) ;
Alert ( "Input :" ) ;
Alert ( " " ) ;
Alert ( "AccountCurrency () = " , AccountCurrency () ) ;
return ( ald.OperationVolume ) ;
}//</amd.OperationVolume>
Ais.
Очень хочется иметь функцию для вычисления размера лота в зависимости от заданного размера стоплосса и суммы в валюте депозита.
Например перед входом в сделку вычисляем стоплосс, допустим он равен 50 пунктов и желаем рискнуть не более чем 200 баксами. Вот эти 2 параметра загняем в функцию, которая вычисляет необходимый при этом размер лота.
Буду признателен если у кого есть подобное, дабы не изобретать велосипед
Функция настолько проста, что лучше изобрети.
// в индикаторе: // можно сделать как эктерны... double ММПРОЦЕНТ=5; // процент допустимой потери от одной сделки int ММСТОПЫ=100; // уровень стопов от цены открытия //... double ТИКЦЕНА=MarketInfo(Symbol(),MODE_TICKVALUE); if(MarketInfo(Symbol(),MODE_TICKVALUE)==0) ТИКЦЕНА=1;// это лишь исключить дление на 0 //... double РЕКОМЛОТ=1/ТИКЦЕНА*(AccountFreeMargin()/100*ММПРОЦЕНТ/ММСТОПЫ); GlobalVariableSet("ГЛОТ",NormalizeDouble(РЕКОМЛОТ,2)); //---------------------------------------------- // в скрипте на открытие считываем рекомендуемый обьём: double ГЛОТ=GlobalVariableGet("ГЛОТ"); // Открыть бай на текущем графике int ticket=OrderSend(Symbol(),OP_BUY,ГЛОТ,Ask,100, Ask-100*Point,Ask+100*Point,"",0,0,CLR_NONE);
Индикатор постоянно на графике, и формирует рекомендованй обьём на открытие,
затем передаёт в глобальную переменную "ГЛОТ"
*
Для открытия пользуюсь скриптом, самый обычный, за тем лишь исключением
что считывает глоб.перепенную "ГЛОТ" и подставляет в обьём...
*
Нормализовано для дилингов с минилотом 0.01 (два знака после запятой).
Без проблем реализуется проверка на соответствие конкретного символа,
для множественного применения по инструментам...
Очень хочется иметь функцию для вычисления размера лота в зависимости от заданного размера стоплосса и суммы в валюте депозита.
Например перед входом в сделку вычисляем стоплосс, допустим он равен 50 пунктов и желаем рискнуть не более чем 200 баксами. Вот эти 2 параметра загняем в функцию, которая вычисляет необходимый при этом размер лота.
Буду признателен если у кого есть подобное, дабы не изобретать велосипед
Мне очень нравится следующая идея!
берем 3 торговых стратегии - т к для чемпионата разрешено 3 ордера!
то считаем, что торгует у нас 3 независимые стратеги ( конечно мы каждую отлаживали и настраивавли тестировали оптимизировали )
берем 10000 / 3 получаем 3333.33 = каждая стратегия исходит из того что видит изначально 3333.33
значит каждой стратегии можно отдать стартовый баланс равный 3333.33
следовательно лот считается исходя из баланса 3333.33
---
если стратегия заработает к этим 3333.33 то пусть и оперирует своим лимитом равным 3333.33 + (ТО ЧТО ОНА СМОГА ЗАРАБОТАТЬ)
Если у Вас одна из трех стратегий начнет сливать то БОЛЬШЕ чем 3333.33 от стартового баланса она не сольет!
если она сольет она просто останавливается! т к не имеет права залазить в балансы двух других стратегий
остануться в запасе еще 2 стратегии! которые могут реально и вполне реально вытянуть в + и даже может в хроший +
---
такой разумный подход использовал БЕТТЕР чемпион 2007 ( в принципе он опубликовал метод своего ММ )
мне очень понравился этот подход!
---
еще можно по прошествии некоторого времени остановить неудачную стратегию и отдать оставшийся баланс двум остальным
но для этого необходимо провести хороший анализ - если все три идут с плюсом я бы не тормозил и не передавал другим ТСкам
Мне очень нравится следующая идея!
берем 3 торговых стратегии - т к для чемпионата разрешено 3 ордера!
то считаем, что торгует у нас 3 независимые стратеги ( конечно мы каждую отлаживали и настраивавли тестировали оптимизировали )
берем 10000 / 3 получаем 3333.33 = каждая стратегия исходит из того что видит изначально 3333.33
Конечно идея не оригинальная, но я в своём советнике сделал именно так. За исключением того, что он у меня мультивалютный - на 3 парах соответсвенно.
Была ещё идея сделать универсальную торговую стратегию, но к сожалению к чемпионату не успел. Видимо это сверх задача. Поэтому в этом году не участвую, не хочу повторять ошибки прошлого чемпа))
Легко представить себе ситуацию, когда система просела и вылезла за отведенные ей 3333.33, но потом пошла вверх. На чампе такое произойдет с большой вероятностью, т.к. ММ должен быть агрессивным (иначе светит не больше 100-го места). Так вот, эта система будет прикончена как раз в тот момент, когда она уменьшила депо на максимально возможную величину. Оставшиеся две системы запросто могут после этого также просесть. Последствия должны быть понятны. Хотя первая система в это время могла выйти из просадки и наработать плюс на балансе для всех трех подсистем.
Так что позитивность такого подхода весьма субьективна.
Легко представить себе ситуацию, когда система просела и вылезла за отведенные ей 3333.33, но потом пошла вверх. На чампе такое произойдет с большой вероятностью, т.к. ММ должен быть агрессивным (иначе светит не больше 100-го места). Так вот, эта система будет прикончена как раз в тот момент, когда она уменьшила депо на максимально возможную величину. Оставшиеся две системы запросто могут после этого также просесть. Последствия должны быть понятны. Хотя первая система в это время могла выйти из просадки и наработать плюс на балансе для всех трех подсистем.
Так что позитивность такого подхода весьма субьективна.
ММ с данным подходом стоял в советнике который победил
и скажем так этим все сказанно
Хотя первая система в это время могла выйти из просадки и наработать плюс на балансе для всех трех подсистем.
Система также в это время могла и не выйти из просадки и с таким же успехом слить баланс всех подсистем.
ММ можно настроить таким образом, что система если и будет сливать, то очень медленно, дабы не прикончить баланс в ноль за три месяца.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Очень хочется иметь функцию для вычисления размера лота в зависимости от заданного размера стоплосса и суммы в валюте депозита.
Например перед входом в сделку вычисляем стоплосс, допустим он равен 50 пунктов и желаем рискнуть не более чем 200 баксами. Вот эти 2 параметра загняем в функцию, которая вычисляет необходимый при этом размер лота.
Буду признателен если у кого есть подобное, дабы не изобретать велосипед