[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 28

 
Где здесь ошибка "wrong parameters count"?
MA1 = iMA(NULL, 0, MA_Period1, MODE_SMA, PRICE_CLOSE,0);
 
Сvovan-gogan:
Где здесь ошибка "wrong parameters count"?


Добрый день! Спасибо, барин, что задали вопрос. Рады услужить.

Кланяемся поясно и зело толково отвечаем :

У Вас явно не хватает одного параметра в iMA:

double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
Расчет скользящего среднего.
Параметры:
symbol - Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика.
period - Период усреднения для вычисления скользящего среднего.
ma_shift - Сдвиг индикатора относительно ценового графика.
ma_method - Метод усреднения. Может быть любым из значений методов скользящего среднего (Moving Average).
applied_price - Используемая цена. Может быть любой из ценовых констант.
shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
--------------------------

Скорее всего, пропущен параметр:

ma_shift - Сдвиг индикатора относительно ценового графика.

С нетерпением ждем Ваших дальнейших вопросов!

 
Спасибо большое)
 

Нужна ваша помощь.

Необходимо перевести вот это выражение

OrderOpenPrice()-OrderClosePrice()
в количество пунктов и посчитать в зависимости от лота профит или стоп для каждой позиции. И в конечном итоге вывести общую сумму в % профита или стопа
 
Vodya:

Нужна ваша помощь.

Необходимо перевести вот это выражение

в количество пунктов ......


Сначала выбираем нужную позицию.

( OrderOpenPrice() - OrderClosePrice() ) /Point - это будет прибыль/убыток выбранной позиции в пунктах

---------------

А вообще-то, для ваших расчетов лучше взять подходящие функции И.Кима. И задача упростится в несколько раз.

https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page3#434225

 
leonid553:


Сначала выбираем нужную позицию.

( OrderOpenPrice() - OrderClosePrice() ) * Point - это будет прибыль/убыток выбранной позиции в пунктах

---------------

А вообще-то, для ваших расчетов лучше взять подходящие функции И.Кима. И задача упростится в несколько раз.

https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page3#434225


Спасибо. Но в его функция я не нашел то что мне нужно. И в этом случае ( OrderOpenPrice() - OrderClosePrice() ) * Point я делаю так ( OrderOpenPrice() - OrderClosePrice() ) / Point

При умножении 00000000000000 вылазят

 

Да, конечно, - я описАлся - нужно делить на Point, а вовсе не умножать!

По функциям.

Это очень просто. Например. Вам нужно узнать текущую прибыль (или убыток) в валюте депозита открытых сделок (предположим) - бАЙ-позиции по евродоллару и селл-позиции по фунт/доллару.

Берете функцию https://www.mql5.com/ru/forum/131859/page3#434223

и копируете её в самый конец вашего кода (вне ф-и СТАРТ)

Тогда текущая прибыль в валюте депозита ваших позиций будет (задаете внутри ф-и СТАРТ):

double ПРИБЫЛЬ_ЕВРОДОЛЛАР = GetProfitOpenPosInCurrency(EURUSD, OP_BUY, -1) ;

double ПРИБЫЛЬ_ФУНТДОЛЛАР = GetProfitOpenPosInCurrency(GBPUSD, OP_SELL, -1) ;

Если при открытии этих позиций вы задавали магик, то вместо "-1" указываете магик.

Если нужно узнать прибыль позиции по текущему символу, т.е. на графике которого установлен и работает советник, то :

double ПРИБЫЛЬ_NULL = GetProfitOpenPosInCurrency(NULL, OP_SELL, -1) ;

 
leonid553:

Да, конечно, - я описАлся - нужно делить на Point, а вовсе не умножать!

По функциям.

Это очень просто. Например. Вам нужно узнать текущую прибыль (или убыток) в валюте депозита открытых сделок (предположим) - бАЙ-позиции по евродоллару и селл-позиции по фунт/доллару.

Берете функцию https://www.mql5.com/ru/forum/131859/page3#434223

и копируете её в самый конец вашего кода (вне ф-и СТАРТ)

Тогда текущая прибыль в валюте депозита ваших позиций будет (задаете внутри ф-и СТАРТ):

double ПРИБЫЛЬ_ЕВРОДОЛЛАР = GetProfitOpenPosInCurrency(EURUSD, OP_BUY, -1) ;

double ПРИБЫЛЬ_ФУНТДОЛЛАР = GetProfitOpenPosInCurrency(GBPUSD, OP_SELL, -1) ;

Если при открытии этих позиций вы задавали магик, то вместо "-1" указываете магик.

Если нужно узнать прибыль позиции по текущему символу, т.е. на графике которого установлен и работает советник, то :

double ПРИБЫЛЬ_NULL = GetProfitOpenPosInCurrency(NULL, OP_SELL, -1) ;


Спасибо за совет.

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

 
Vodya:


Спасибо за совет.

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

Ниже приведены функции для подсчета Прибыли и Убытков.

Имея размер/величину Прибыли и Убытка, сможете посчитать, что это составляет в процентах от депо.

 double Profit(){
   double profit=0; 
   for(int i=OrdersHistoryTotal()-1; i>=0; i--){
     if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; 
     if(OrderSymbol()!=Symbol())continue;
     if(OrderMagicNumber()!=Magic)continue;
     if(OrderType()>1)continue;
     if(OrderProfit()>0)profit+=OrderProfit();
    }        
 return(profit);} 

 double Loss(){
   double loss=0; 
   for(int i=OrdersHistoryTotal()-1; i>=0; i--){
     if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; 
     if(OrderSymbol()!=Symbol())continue;
     if(OrderMagicNumber()!=Magic)continue;
     if(OrderType()>1)continue;
     if(OrderProfit()<0)loss+=OrderProfit();
    }        
 return(loss);} 
 
charter:

Ниже приведены функции для подсчета Прибыли и Убытков.

Имея размер/величину Прибыли и Убытка, сможете посчитать, что это составляет в процентах от депо.


Спсибо.

Но при компиляции в этом рядке

double Profit(){

вылазит '(' - function definition unexpected

и вот это '}' - unbalanced parentheses там где последний return(0)

Куда это вообще надо вставить? Может я не туда его засунул