Ответ
 
Опции темы
Старый 23.11.2012, 14:05   #541 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от greatiger Посмотреть сообщение
eevviill, привет, а есть какая-нибудь функция,чтобы MAX_Trades стандартно приделывать? (максимальное ограничение колен в мартинах ограничивать не через Макс.лот или просто число сделок в одну сторону (или даже обе))
Посмотри в моих уроках подсчёт открытых ордеров. Ставишь функцию (ссылку на неё) перед открытием ордера, а потом если бай надо, то

PHP код:
CountOpenPositions();

if(
buy<Max_orders)
{
OrderSend(...);

eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
greatiger (23.11.2012)
Старый 23.11.2012, 14:48   #542 (permalink)
Активный участник
 
Аватар для greatiger
 
Регистрация: 06.02.2010
Сообщений: 490
Репутация: 68
greatiger
Сказал(а) спасибо: 318
Поблагодарили 67 раз(а) в 59 сообщениях
Поинты: 333
Сообщение от eevviill Посмотреть сообщение
Посмотри в моих уроках подсчёт открытых ордеров. Ставишь функцию (ссылку на неё) перед открытием ордера, а потом если бай надо, то

PHP код:
CountOpenPositions();

if(
buy<Max_orders)
{
OrderSend(...);


Боюсь я слишком туг и малообразован в MQL,чтобы такое объяснение понять

А можешь объяснить как в том примере с ММ чуть подробнее в переменные то-то, в условие в основной код то-то, в функции это
greatiger вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 23.11.2012, 15:39   #543 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от greatiger Посмотреть сообщение

Боюсь я слишком туг и малообразован в MQL,чтобы такое объяснение понять

А можешь объяснить как в том примере с ММ чуть подробнее в переменные то-то, в условие в основной код то-то, в функции это
Так я же написал.

Ищёшь OrderSend. Пишешь как я написал.
Только с моих уроков функцию скопируй
void CountOpenPoisitions();

Там всё нормально объяснено. Если не поймёшь то объясню ещё раз.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
greatiger (23.11.2012)
Старый 23.11.2012, 17:16   #544 (permalink)
Активный участник
 
Аватар для greatiger
 
Регистрация: 06.02.2010
Сообщений: 490
Репутация: 68
greatiger
Сказал(а) спасибо: 318
Поблагодарили 67 раз(а) в 59 сообщениях
Поинты: 333
Сообщение от eevviill Посмотреть сообщение
Так я же написал.

Ищёшь OrderSend. Пишешь как я написал.
Только с моих уроков функцию скопируй
void CountOpenPoisitions();

Там всё нормально объяснено. Если не поймёшь то объясню ещё раз.
Цитата:
int buy,sell,sell_stop,buy_stop;
...

void CountOpenPositions()
{
buy=0;
sell=0;
buy_stop=0;
sell_stop=0;


1)for (int i=OrdersTotal()-1; i>=0; i--)
{
2)OrderSelect(i,SELECT_BY_POS);
{
3)if(OrderMagicNumber()==magic)
{
4)if(OrderType()==OP_BUY) buy++;
if(OrderType()==OP_SELL) sell++;
if(OrderType()==OP_BUYSTOP) buy_stop++;
if(OrderType()==OP_SELLSTOP) sell_stop++;
}
}
}

}
5)
вот эта?
но я ж так все равно не пойму так как нуль(

мне бы как чайнику...

значит заходим в советника
1. В описании переменных в начале пишем "....." (пишем extern double Max_orders=5; ??? например)
2. Ищем int start, вставляем после точки с запятой но перед OrderSend условие?
if(buy<Max_orders)
{
OrderSend(...);

3. Приписываем функцию...
....double ()
{}
...функцию какую-то

я только так догоню(
}

ПС...а как ограничить не только покупку? а все?



ПС2...нашел еще вот
Цитата:
Как сделать виртуальный ТП.
extern int Virtual_TP=24;


double point = 0.0001;

int Start{
...
if(Bid>OrderOpenPrice()+Virtual_TP*point) OrderClose(...);

...
}
а есть стандартные функции как сделать из реального ТП виртуальный? и чтобы в случае проскальзывания или резкого обвала за цену в сторону ТП не ломался алгоритм советника, а все равно закрывал

Последний раз редактировалось greatiger; 23.11.2012 в 17:23.
greatiger вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 23.11.2012, 17:38   #545 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от greatiger Посмотреть сообщение
значит заходим в советника
1. В описании переменных в начале пишем "....." (пишем extern double Max_orders=5; ??? например)
2. Ищем int start, вставляем после точки с запятой но перед OrderSend условие?
if(buy<Max_orders)
{
OrderSend(...);

3. Приписываем функцию...
....double ()
{}
...функцию какую-то



ПС...а как ограничить не только покупку? а все?



ПС2...нашел еще вот

а есть стандартные функции как сделать из реального ТП виртуальный? и чтобы в случае проскальзывания или резкого обвала за цену в сторону ТП не ломался алгоритм советника, а все равно закрывал
1) Пишем в глобальных переменных
PHP код:
extern int Max_trades=4;
int buy,sell
2) Перед ОрдерСенд пишем
PHP код:
if(buy<Max_orders)

OrderSend(...); 

3) Перед 2 пишем ссылку на функцию подсчёта ордеров
PHP код:
CountOpenPositions(); 
4) В конце записываем саму функцию.
PHP код:
/////////////////////////////////////////////////////////
void CountOpenPositions() 

buy=0
sell=0

for (
int i=OrdersTotal()-1i>=0i--) 
 { 
   
OrderSelect(i,SELECT_BY_POS); 
   { 
   if(
OrderMagicNumber()==magic
   {         
   if(
OrderType()==OP_BUY)      buy++;
   if(
OrderType()==OP_SELL)     sell++;  
   }               
   } 
 } 


P.S.2. buy+sell

P.S.3. Для виртуального ТП и СЛ надо немного язык знать. И оно вообще не нужно.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
greatiger (23.11.2012)
Старый 23.11.2012, 20:29   #546 (permalink)
Активный участник
 
Аватар для greatiger
 
Регистрация: 06.02.2010
Сообщений: 490
Репутация: 68
greatiger
Сказал(а) спасибо: 318
Поблагодарили 67 раз(а) в 59 сообщениях
Поинты: 333
Ок спасибо, а как для иланов ввести расширение пипстепа согласно заданному коэффициенту...там обычно во всех пипстеп есть настраиваемый...а сделать бы коэффициент пипстепа...например 1.2 при значении 40 расширлся бы каждое колено 48 57 и тд или при значении 0.9 сужался бы с каждым коленом до 36...33 и т.д...

есть какая-нибудь стандартная функция, чтобы такое приделывать?)
greatiger вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.11.2012, 10:14   #547 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от greatiger Посмотреть сообщение
Ок спасибо, а как для иланов ввести расширение пипстепа согласно заданному коэффициенту...там обычно во всех пипстеп есть настраиваемый...а сделать бы коэффициент пипстепа...например 1.2 при значении 40 расширлся бы каждое колено 48 57 и тд или при значении 0.9 сужался бы с каждым коленом до 36...33 и т.д...

есть какая-нибудь стандартная функция, чтобы такое приделывать?)
Нету.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
greatiger (24.11.2012)
Старый 24.11.2012, 15:15   #548 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Такой вопрос. Есть такой код
if (OrderType() == OP_BUYSTOP)
{
prof = NormalizeDouble((Bid-OrderOpenPrice()),Digits); }
if ( OrderType()== OP_SELLSTOP)
{
prof = NormalizeDouble((OrderOpenPrice()-Ask),Digits); }
Но в сове нет реакции на эту разницу. Просьба сказать, что сделано не так...
Мне нужно, чтобы эта разница была в пунктах...

Последний раз редактировалось Алекc1234; 24.11.2012 в 15:24.
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.11.2012, 15:54   #549 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Алекc1234 Посмотреть сообщение
Такой вопрос. Есть такой код
if (OrderType() == OP_BUYSTOP)
{
prof = NormalizeDouble((Bid-OrderOpenPrice()),Digits); }
if ( OrderType()== OP_SELLSTOP)
{
prof = NormalizeDouble((OrderOpenPrice()-Ask),Digits); }
Но в сове нет реакции на эту разницу. Просьба сказать, что сделано не так...
Мне нужно, чтобы эта разница была в пунктах...
Раздели на Point что бы получить результат в пунктах.
prof = NormalizeDouble((Bid-OrderOpenPrice()),Digits)/Point;

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (24.11.2012), Алекc1234 (24.11.2012)
Старый 24.11.2012, 16:43   #550 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от Ugar Посмотреть сообщение
Раздели на Point что бы получить результат в пунктах.
prof = NormalizeDouble((Bid-OrderOpenPrice()),Digits)/Point;
Или так. Но не в пунктах.

PHP код:
double prof=0;
for(
int it=0it<=OrdersTotal(); it++)
 {
 if(
OrderSelect(it,SELECT_BY_POS))
 {
 if(
OrderMagicNumber()==magic)
 {
 if(
OrderType()==OP_BUY)
 {
prof+=OrderProfit()+OrderSwap()+OrderCommission();   
 }
 }
 }
 } 
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Алекc1234 (24.11.2012)
Старый 24.11.2012, 16:48   #551 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Сообщение от eevviill Посмотреть сообщение
Или так. Но не в пунктах.

PHP код:
double prof=0;
for(
int it=0it<=OrdersTotal(); it++)
 {
 if(
OrderSelect(it,SELECT_BY_POS))
 {
 if(
OrderMagicNumber()==magic)
 {
 if(
OrderType()==OP_BUY)
 {
prof+=OrderProfit()+OrderSwap()+OrderCommission();   
 }
 }
 }
 } 
Интересный вариант. Мне пригодится. А то же самое возможно в пунктах сделать?
Только по моему эта строчка здесь лишняя
if(OrderType()==OP_BUY)
Или я не прав?

Последний раз редактировалось Алекc1234; 24.11.2012 в 16:54.
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.11.2012, 17:00   #552 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от eevviill Посмотреть сообщение
Или так. Но не в пунктах.

PHP код:
double prof=0;
for(
int it=0it<=OrdersTotal(); it++)
 {
 if(
OrderSelect(it,SELECT_BY_POS))
 {
 if(
OrderMagicNumber()==magic)
 {
 if(
OrderType()==OP_BUY)
 {
prof+=OrderProfit()+OrderSwap()+OrderCommission();   
 }
 }
 }
 } 
А при чём тут прибыль в валюте? Там была разница между ценой и ценой открытия отложенного ордера. Просто надо было перевести в пункты.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.11.2012, 17:04   #553 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Сообщение от Ugar Посмотреть сообщение
А при чём тут прибыль в валюте? Там была разница между ценой и ценой открытия отложенного ордера. Просто надо было перевести в пункты.
Да, тут Вы правы. Но и по профиту я тоже пробую ставить условие, так что мне интересны оба варианта. Скажите, по Вашему варианту ведь эта строчка тоже обязательна
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS)) {
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.11.2012, 17:18   #554 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от Алекc1234 Посмотреть сообщение
Интересный вариант. Мне пригодится. А то же самое возможно в пунктах сделать?
Только по моему эта строчка здесь лишняя
if(OrderType()==OP_BUY)
Или я не прав?
Ну это будет считатся профит только по бай ордерам. Можно и по нескольким типам.
PHP код:
 if(OrderType()==OP_BUY || OrderType()==OP_SELL || OrderType()==OP_BUYSTOP
А ещё можна добавить проверку на соответсвие символа.
PHP код:
if(OrderSymbol()==Symbol()) 
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Алекc1234 (24.11.2012)
Старый 24.11.2012, 17:24   #555 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Сообщение от eevviill Посмотреть сообщение
Ну это будет считатся профит только по бай ордерам. Можно и по нескольким типам.
PHP код:
 if(OrderType()==OP_BUY || OrderType()==OP_SELL || OrderType()==OP_BUYSTOP
А ещё можна добавить проверку на соответсвие символа.
PHP код:
if(OrderSymbol()==Symbol()) 
Спасибо. А можно как-то сделать, чтоб написать прибыль в пунктах?
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.11.2012, 17:50   #556 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от Алекc1234 Посмотреть сообщение
Спасибо. А можно как-то сделать, чтоб написать прибыль в пунктах?
Гы гы. Так тебе же Ugar написал что надо в твоём примере дописать. Надо на Point поделить.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 24.11.2012, 17:54   #557 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Сообщение от eevviill Посмотреть сообщение
Гы гы. Так тебе же Ugar написал что надо в твоём примере дописать. Надо на Point поделить.
Да, я сделал, но вроде не так работает, как я хочу. Может, как нибудь по другому можно?
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 24.11.2012, 18:07   #558 (permalink)
Местный житель
 
Аватар для Алекc1234
 
Регистрация: 24.03.2011
Сообщений: 697
Репутация: 276
Алекc1234 Алекc1234 Алекc1234
Сказал(а) спасибо: 391
Поблагодарили 276 раз(а) в 176 сообщениях
Поинты: 0
Всё, вопрос пока снимается. Вроде всё получилось. Спасибо всем.
Алекc1234 на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (24.11.2012)
Старый 24.11.2012, 18:08   #559 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Алекc1234 Посмотреть сообщение
Да, тут Вы правы. Но и по профиту я тоже пробую ставить условие, так что мне интересны оба варианта. Скажите, по Вашему варианту ведь эта строчка тоже обязательна
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS)) {
Если используется OrderOpenPrice() то перед этим обязательно надо выбрать ордер, иначе от куда программа узнает какого именно ордера надо цену открытия.
Эта строчка и есть выбор ордера, только она не полная.
При использовании параметра SELECT_BY_POS нужно обязательно указывать среди каких ордеров искать, открытых или исторических.
Вот так должна выглядеть эта строчка:
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS, MODE_TRADES)) {

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (24.11.2012), Алекc1234 (24.11.2012)
Старый 24.11.2012, 19:48   #560 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от Алекc1234 Посмотреть сообщение
Всё, вопрос пока снимается. Вроде всё получилось. Спасибо всем.
И ещё. Очень помагает Alert();
Вот если бы ты после своего примера поставил Alert(prof);
То увидел бы что у тебя примерно так 0.0078, и понятно сразу что это надо поделить на Point.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Алекc1234 (24.11.2012)
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 13:32. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO