помощь эксперта - страница 2

 
delcor wrote >>

скажите, есть ли тестовая система в программировании советника, чтобы показать вам шаг за шагом, что происходит, когда этот советник работает

нет, для тестирования нет пошагового ftn ; используйте Print для отображения значений для проверки и различных частей ваших программ

 

Мне нравится ваш код для оптимизации лотов; я подправил его, чтобы увеличить объем лота при увеличении убытков

 
ronaldosim:

Мне нравится ваш код для оптимизации лотов; я подправил его, чтобы увеличить объем лота при увеличении убытков

покажите мне, пожалуйста.

или пришлите мне вашего эксперта

 
delcor:

покажите мне, пожалуйста

или пришлите мне вашего советника

он выдает ошибку

Функция "CalculateCurrentOrders" не является ссылочной и будет удалена из exp-файла
 
delcor wrote >>

он выдает мне ошибку

Функция "CalculateCurrentOrders" не используется и будет удалена из exp-файла

просто игнорируйте эту ошибку; все, что она говорит, это то, что у вас есть функция CalculateCurrentOrders, которую вы не используете, поэтому либо удалите ее, либо левеа, это не причинит никакого вреда; система говорит, что удалит эту функцию из вашего скомпилированного файла ex4

 
delcor wrote >>

покажите мне, пожалуйста

или пришлите мне ваш советник

в функции LotOptimization измените свой код на примерно такой

lot=lot*MulltiplyingFactor*losses

где MulitplyFactor = 2 или 3 или 4 и т.д., аналогично вашему DecreaseFactor, который должен уменьшать ваши размеры лота по мере роста убытков.

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

 
ronaldosim:

в функции LotOptimization измените свой код на примерно такой

lot=lot*MulltiplyingFactor*losses

где MulitplyFactor = 2 или 3 или 4 и т.д., аналогично вашему DecreaseFactor, который должен уменьшать ваши размеры лота по мере роста убытков.

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

Вы имеете в виду что-то вроде этого

//+------------------------------------------------------------------+
//| Рассчитайте оптимальный размер лота |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots*Multiplying*losses;
int orders=HistoryTotal(); // общее количество ордеров на истории
int losses=0; // количество ордеров с убытками без перерыва
//---- выбор размера лота
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- рассчитать количество убыточных ордеров без перерыва
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Ошибка в истории!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//---- возвращает размер лота
if(lot<0.1) lot=0.1;
return(lot);
}
 
delcor wrote >>

вы имеете в виду что-то вроде этого

//+------------------------------------------------------------------+
//| Вычислить оптимальный размер лота |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots*Multiplying*losses;
int orders=HistoryTotal(); // общее количество ордеров на истории
int losses=0; // количество ордеров с убытками без перерыва
//---- выбор размера лота
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- рассчитать количество убыточных ордеров без перерыва
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Ошибка в истории!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
if(losses>1) lot=NormalizeDouble(Lots*Multiplying*losses;,1);}
//---- возвращает размер лота
if(lot<0.1) lot=0.1;
return(lot);
}

нет, поставьте его после if(losses>1)

 
ronaldosim:

нет, поставьте его после if(losses>1).

это дает мне ошибку

'Multiplying' - переменная не определена C:\Program Files\Interbank FX Trader 4\experts\jbtest4.mq4 (57, 44)

где я его определяю

 
delcor:

он выдает мне ошибку

'Multiplying' - переменная не определена C:\Program Files\Interbank FX Trader 4\experts\jbtest4.mq4 (57, 44)

где я его определяю



Хорошо, у меня int multiplying=2;