Ответить
23.11.2012, 14:05
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,034 раз(а) / Репутация: 9034
  • Отправить сообщение для eevviill с помощью Skype™
eevviill, привет, а есть какая-нибудь функция,чтобы MAX_Trades стандартно приделывать? (максимальное ограничение колен в мартинах ограничивать не через Макс.лот или просто число сделок в одну сторону (или даже обе))
Посмотри в моих уроках подсчёт открытых ордеров. Ставишь функцию (ссылку на неё) перед открытием ордера, а потом если бай надо, то

PHP код:
CountOpenPositions();

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

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

PHP код:
CountOpenPositions();

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


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

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

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,034 раз(а) / Репутация: 9034
  • Отправить сообщение для eevviill с помощью Skype™

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

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

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

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

Ищёшь 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.
23.11.2012, 17:38
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,034 раз(а) / Репутация: 9034
  • Отправить сообщение для eevviill с помощью Skype™
значит заходим в советника
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. Для виртуального ТП и СЛ надо немного язык знать. И оно вообще не нужно.
23.11.2012, 20:29
Аватар для greatiger
greatiger greatiger вне форума Активный участник
Регистрация: 06.02.2010 / Сообщений: 490
Поблагодарили 67 раз(а) / Репутация: 68
Ок спасибо, а как для иланов ввести расширение пипстепа согласно заданному коэффициенту...там обычно во всех пипстеп есть настраиваемый...а сделать бы коэффициент пипстепа...например 1.2 при значении 40 расширлся бы каждое колено 48 57 и тд или при значении 0.9 сужался бы с каждым коленом до 36...33 и т.д...

есть какая-нибудь стандартная функция, чтобы такое приделывать?)
24.11.2012, 10:14
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

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

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

Последний раз редактировалось Алекc1234; 24.11.2012 в 15:24.
24.11.2012, 15:54
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Сообщение от: Алек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
Чужие программы не переделываю!
24.11.2012, 16:43
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,034 раз(а) / Репутация: 9034
  • Отправить сообщение для eevviill с помощью Skype™
Раздели на 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();   
 }
 }
 }
 } 
24.11.2012, 16:48
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 701
Поблагодарили 276 раз(а) / Репутация: 276
Или так. Но не в пунктах.

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.
24.11.2012, 17:00
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Или так. Но не в пунктах.

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
Чужие программы не переделываю!
24.11.2012, 17:04
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 701
Поблагодарили 276 раз(а) / Репутация: 276
А при чём тут прибыль в валюте? Там была разница между ценой и ценой открытия отложенного ордера. Просто надо было перевести в пункты.
Да, тут Вы правы. Но и по профиту я тоже пробую ставить условие, так что мне интересны оба варианта. Скажите, по Вашему варианту ведь эта строчка тоже обязательна
if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS)) {
24.11.2012, 17:18
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,034 раз(а) / Репутация: 9034
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от: Алекc1234
Интересный вариант. Мне пригодится. А то же самое возможно в пунктах сделать?
Только по моему эта строчка здесь лишняя
if(OrderType()==OP_BUY)
Или я не прав?
Ну это будет считатся профит только по бай ордерам. Можно и по нескольким типам.
PHP код:
 if(OrderType()==OP_BUY || OrderType()==OP_SELL || OrderType()==OP_BUYSTOP
А ещё можна добавить проверку на соответсвие символа.
PHP код:
if(OrderSymbol()==Symbol()) 
24.11.2012, 17:24
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 701
Поблагодарили 276 раз(а) / Репутация: 276
Ну это будет считатся профит только по бай ордерам. Можно и по нескольким типам.
PHP код:
 if(OrderType()==OP_BUY || OrderType()==OP_SELL || OrderType()==OP_BUYSTOP
А ещё можна добавить проверку на соответсвие символа.
PHP код:
if(OrderSymbol()==Symbol()) 
Спасибо. А можно как-то сделать, чтоб написать прибыль в пунктах?
24.11.2012, 17:50
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,034 раз(а) / Репутация: 9034
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от: Алекc1234
Спасибо. А можно как-то сделать, чтоб написать прибыль в пунктах?
Гы гы. Так тебе же Ugar написал что надо в твоём примере дописать. Надо на Point поделить.
24.11.2012, 17:54
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 701
Поблагодарили 276 раз(а) / Репутация: 276
Гы гы. Так тебе же Ugar написал что надо в твоём примере дописать. Надо на Point поделить.
Да, я сделал, но вроде не так работает, как я хочу. Может, как нибудь по другому можно?
24.11.2012, 18:07
Аватар для Алекc1234
Алекc1234 Алекc1234 вне форума Местный житель
Регистрация: 24.03.2011 / Сообщений: 701
Поблагодарили 276 раз(а) / Репутация: 276
Всё, вопрос пока снимается. Вроде всё получилось. Спасибо всем.
24.11.2012, 18:08
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Сообщение от: Алек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
Чужие программы не переделываю!
24.11.2012, 19:48
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,034 раз(а) / Репутация: 9034
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от: Алекc1234
Всё, вопрос пока снимается. Вроде всё получилось. Спасибо всем.
И ещё. Очень помагает Alert();
Вот если бы ты после своего примера поставил Alert(prof);
То увидел бы что у тебя примерно так 0.0078, и понятно сразу что это надо поделить на Point.
Ответить

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


Опции темы

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

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



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


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