Ответ
 
Опции темы
23.02.2013, 19:09
Аватар для aufx
aufx Интересующийся
Регистрация: 16.11.2012 / Сообщений: 26
Поблагодарили 2 раз(а) / Репутация: 3
Сообщение от qqmber Посмотреть сообщение
Посмотрите файл include\WinUser32.mqh Там описаны функции вызова WinAPI из user32.dll, и почти все из них принимают дескриптор как аргумент.
Спасибо! Не подскажете где можно поподробнее ознакомиться с работой этих функций?
aufx вне форума Ответить с цитированиемОтветить с цитированием  
23.02.2013, 19:12
Аватар для aufx
aufx Интересующийся
Регистрация: 16.11.2012 / Сообщений: 26
Поблагодарили 2 раз(а) / Репутация: 3
Сообщение от Ugar Посмотреть сообщение
1 Пример:
Допустим нужно что бы советник отличал свои ордера от чужих. Для этого используют Magic. А если нужно что бы после перезапуска терминала советник забыл свои старые ордера. В качестве magic можно использовать дескриптор окна. Маджики у все советников будут разными потому что дескрипторы разные. И при перезапуске советники забудут свои старые ордера, так как после перезапуска дескрипторы будут другими.
2 пример:
Допустим советник, при запуске терминала сильно тормозит. Или по другой причине, нужно что бы советники запускались не одновременно.
На первом тике после запуска ставим Sleep. Время задержки задаём рандомом. Но рандом генерит псевдо случайность. По этому у всех советников будут одинаковые значения. А вот если предварительно рандом генераторы инициализировать дескриптором окна, то в результате у всех советников будет выдержана разная пауза.
Если подумать можно придумать много примеров. Только зачем? Лучше действовать наоборот. Для решения задач искать подходящий инструментарий, вместо того что бы искать задачи по инструментарий.
Спасибо!
aufx вне форума Ответить с цитированиемОтветить с цитированием  
24.02.2013, 15:59
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от aufx Посмотреть сообщение
Спасибо! Не подскажете где можно поподробнее ознакомиться с работой этих функций?
Эти функции выполняются не терминалом, а самой Виндой, описания соответственно читать на msdn.microsoft.com.
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
aufx (24.02.2013), eevviill (24.02.2013)
24.02.2013, 18:37
Аватар для aufx
aufx Интересующийся
Регистрация: 16.11.2012 / Сообщений: 26
Поблагодарили 2 раз(а) / Репутация: 3
Сообщение от qqmber Посмотреть сообщение
Эти функции выполняются не терминалом, а самой Виндой, описания соответственно читать на msdn.microsoft.com.
Спасибо!!!
aufx вне форума Ответить с цитированиемОтветить с цитированием  
25.02.2013, 09:10
Аватар для vetallic
vetallic Местный знаток
Регистрация: 31.08.2010 / Сообщений: 352
Поблагодарили 509 раз(а) / Репутация: 511
всем прет!
решил поковырятся с пивот...
вопрос, как указать выбранный период времени для отображения пивот (например дневной для всех таймов...)
vetallic вне форума Ответить с цитированиемОтветить с цитированием  
26.02.2013, 17:45
Аватар для vetallic
vetallic Местный знаток
Регистрация: 31.08.2010 / Сообщений: 352
Поблагодарили 509 раз(а) / Репутация: 511
... разобрался )))
vetallic вне форума Ответить с цитированиемОтветить с цитированием  
28.02.2013, 16:59
Аватар для brend
brend Интересующийся
Регистрация: 27.12.2012 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 1
Здравствуйте!
Хочу к советнику из учебника прикрутить индикатор. В индикаторе есть эти строки:

Код:
if (trend > 0) UpBuffer[shift] = MABuffer;
      else if (trend < 0) DnBuffer[shift] = MABuffer;
Помогите из них добыть сигналы buy u sell
brend вне форума Ответить с цитированиемОтветить с цитированием  
28.02.2013, 17:06
Аватар для brend
brend Интересующийся
Регистрация: 27.12.2012 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 1
Здравствуйте!
Хочу попробовать к советнику из учебника прикрутить индикатор. В индикаторе есть строки :
Код:
if (trend > 0) UpBuffer[shift] = MABuffer;
      else if (trend < 0) DnBuffer[shift] = MABuffer;
Помогите, пожалуйста, добыть из них сигналы buy u sell
brend вне форума Ответить с цитированиемОтветить с цитированием  
28.02.2013, 18:58
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от brend Посмотреть сообщение
Здравствуйте!
Хочу попробовать к советнику из учебника прикрутить индикатор. В индикаторе есть строки :
Код:
if (trend > 0) UpBuffer[shift] = MABuffer;
      else if (trend < 0) DnBuffer[shift] = MABuffer;
Помогите, пожалуйста, добыть из них сигналы buy u sell
Ставишь на график индикатор. В свойствах на закладке "Цвет" смотришь Какая цифра слева от интересующего тебя цвета. Это и есть номер буфера. Этот номер и надо ставить в функцию iCustom(string symbol, int timeframe, string name, ..., int mode, int shift)
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
brend (01.03.2013), eevviill (05.03.2013)
01.03.2013, 13:24
Аватар для brend
brend Интересующийся
Регистрация: 27.12.2012 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 1
Сообщение от AlexeyVik Посмотреть сообщение
Ставишь на график индикатор. В свойствах на закладке "Цвет" смотришь Какая цифра слева от интересующего тебя цвета. Это и есть номер буфера. Этот номер и надо ставить в функцию iCustom(string symbol, int timeframe, string name, ..., int mode, int shift)

Спасибо! Буду пробовать
brend вне форума Ответить с цитированиемОтветить с цитированием  
04.03.2013, 10:02
Аватар для Corey Hate
Corey Hate Интересующийся
Регистрация: 11.11.2010 / Адрес: Белорецк / Сообщений: 8
Поблагодарили 3 раз(а) / Репутация: 4
Здравствуйте! Помогите, пожалуйста, разобраться с функцией Hour(). Мне не понятно следующее: ноль возвращается с 23:00:01 до 0:00:00 или с 0:00:01 до 1:00:00?
Corey Hate вне форума Ответить с цитированиемОтветить с цитированием  
04.03.2013, 10:18
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от Corey Hate Посмотреть сообщение
Здравствуйте! Помогите, пожалуйста, разобраться с функцией Hour(). Мне не понятно следующее: ноль возвращается с 23:00:01 до 0:00:00 или с 0:00:01 до 1:00:00?
Ноль возвращается с 00:00:00 по 00:59:59 включительно.
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Corey Hate (04.03.2013), eevviill (05.03.2013)
04.03.2013, 12:38
Аватар для jib07
jib07 Местный житель
Регистрация: 11.04.2011 / Сообщений: 336
Поблагодарили 269 раз(а) / Репутация: 270
Здравствуйте! Сломал всю голову, ничего не смог придумать, помогите.

Проблема:

Как удалить отложенный ордер, если на этой цене уже есть такой же.

Задача:

Поставить отложенный ордер, если на этой цене уже есть полностью идентичный ордер, удалить предыдущий!

Спасибо!
jib07 вне форума Ответить с цитированиемОтветить с цитированием  
05.03.2013, 14:15
Аватар для sbmill
sbmill Местный житель
Регистрация: 14.12.2009 / Сообщений: 217
Поблагодарили 211 раз(а) / Репутация: 210
Здравствуйте!!!
Пишу первый простенький индикатор по расхождению валютных курсов GBPUSD&USDCAD от заданной нулевой точки в валюте депозита USD, сталкнулся с проблемкой, когда устанавливаю индикатор на график GBPUSD полученная линия расчитанная по формуле Buf_0[i] отображается корректно, а вторая линия расчитанная по формуле Buf_1[i] отображается не корректно т.к. считает Close той валютной пары на график которой установлен индикатор. Вопрос, что добавить в Buf_1[i], чтобы расчет производился по валютной паре USDCAD, когда индикатор устанавливаешь на график GBPUSD.
Buf_0[i]=(3000*Close[i])-(3000*1.5493);
Buf_1[i]=((5000*1.0199)-(5000*Close[i]))/Close[i];
sbmill вне форума Ответить с цитированиемОтветить с цитированием  
05.03.2013, 14:22
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от sbmill Посмотреть сообщение
Здравствуйте!!!
... чтобы расчет производился по валютной паре USDCAD, когда индикатор устанавливаешь на график GBPUSD.
Чтобы получить котировку другой пары используйте функцию
double iClose( string symbol, int timeframe, int shift)
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (05.03.2013), sbmill (05.03.2013)
05.03.2013, 17:19
Аватар для sbmill
sbmill Местный житель
Регистрация: 14.12.2009 / Сообщений: 217
Поблагодарили 211 раз(а) / Репутация: 210
Сообщение от qqmber Посмотреть сообщение
Чтобы получить котировку другой пары используйте функцию
double iClose( string symbol, int timeframe, int shift)
Подставил функцию, при компиляции выдает ошибку iClose variable expected
Buf_1[i]=(5000*1.0199)-(5000*double iClose("USDCAD",0,i));
sbmill вне форума Ответить с цитированиемОтветить с цитированием  
05.03.2013, 17:24
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от sbmill Посмотреть сообщение
Подставил функцию, при компиляции выдает ошибку iClose variable expected
Buf_1[i]=(5000*1.0199)-(5000*double iClose("USDCAD",0,i));
Убери double и будет тебе счастье.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (05.03.2013), sbmill (05.03.2013)
05.03.2013, 17:29
Аватар для maks5317
maks5317 Активный участник
Регистрация: 21.12.2012 / Сообщений: 37
Поблагодарили 30 раз(а) / Репутация: 31
проясните ситуевину?вкрутил лок,но помоему один алгоритм мешает другому?посмотрите не проходите мимо?

Скрытый текст

extern double Risk = 5;
extern int lock_min_step = 30; //ограничение на минимальный шаг, чтобы не получилось каждый пипс новый лок
extern int lock_part = 2; //насколько частей будем дробить убыток который находится в рынке, если 2 то значит на 1/2
string lock_signalsymbol = "EURUSD";
static double lock_eqviti,lock_last, lock_lot;
static bool lock_flag,flagADX,old_uptrend;

2. Функцию start() переименовываем в start_main() и добавляем над ней:
int start(){
double AccountRisk = (AccountBalance()-AccountEquity())/AccountBalance()*100;
if (AccountRisk >Risk) lock_flag=true;
if(OrdersTotal()<1){lock_eqviti=AccountBalance();lock_last = Close[0];}
if(lock_flag) start_lock(); else start_main();
return(0);
}

3. В функцию init() добавляем
int init(){
init_lock();
return(0);
}

4. Ниже добавляем:
int init_lock(){
lock_eqviti=AccountBalance();
lock_lot = 0;
lock_last = Close[0];
flagADX=true;
old_uptrend=false;
signal();
lock_flag = false;
return(0);
}

void start_lock(){
int sig,step;
if(OrdersTotal()<1){init_lock();return(0);}
notakeprofit();
if (AccountEquity()>=lock_eqviti){CloseAllFirstProfit();init_lock();return(0);}
else{
sig=signal();
step =MathAbs(sig);
if (step<lock_min_step) return(0);
if (Ask>lock_last+(step*Point) && sig>0 ){
if (lock_lot==0)lock_lot=NormalizeLot(GetAmountLotFromOpenPos("", OP_SELL,-1)/lock_part);
RefreshRates();
OrderSend(Symbol(),OP_BUY,lock_lot,Ask,5,0,0,"lock",0,Blue);
lock_last = Ask;
}
if (Bid<lock_last-(step*Point) && sig<0){
if (lock_lot==0) lock_lot=NormalizeLot(GetAmountLotFromOpenPos("", OP_BUY,-1)/lock_part);
RefreshRates();
OrderSend(Symbol(),OP_SELL,lock_lot,Bid,5,0,0,"lock",0,Blue);
lock_last = Bid;
}
}
return;
}

int signal() {
int i, j, result;
double smin, smax, SsMax, SsMin, SSP, price,KanalMin,KanalMax;
SSP = MathCeil(150 / iADX(lock_signalsymbol, PERIOD_M5, 14, PRICE_TYPICAL, MODE_MAIN, 1));
for (j = 120; j >= 0; j--) {
SsMax = iHigh(lock_signalsymbol, PERIOD_M5,j);SsMin = iLow(lock_signalsymbol, PERIOD_M5,j);
for (i = j; i <= j + SSP - 1; i++) {
price = iHigh(lock_signalsymbol, PERIOD_M5,i);
if (SsMax < price)SsMax = price;
price = iLow(lock_signalsymbol, PERIOD_M5,i);if (SsMin >= price)SsMin = price;}
smin = SsMin + (SsMax - SsMin)*0.30;smax = SsMax - (SsMax - SsMin)*0.30;
if (iClose(lock_signalsymbol, PERIOD_M5,j) < smin) {flagADX = false; KanalMin = smin;}
if (iClose(lock_signalsymbol, PERIOD_M5,j) > smax) {flagADX = true; KanalMax=smax;}
result = 0;
if (flagADX != old_uptrend && flagADX == true) result = +1;
if (flagADX != old_uptrend && flagADX == false) result = -1;
old_uptrend = flagADX;
}
if (Digits==5)return(MathAbs(NormalizeDouble((KanalMax-KanalMin)/Point/10,0))*result);
if (Digits==4)return(MathAbs(NormalizeDouble((KanalMax-KanalMin)/Point,0))*result);
}

void CloseAllFirstProfit() {
int i, k=OrdersTotal();
for (i=k-1; i>=0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderType()==OP_BUY || OrderType()==OP_SELL) if (OrderProfit()+OrderSwap()>0) ClosePosBySelect();
k=OrdersTotal();
for (i=k-1; i>=0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderType()==OP_BUY || OrderType()==OP_SELL) ClosePosBySelect();
}

void ClosePosBySelect() {
if (OrderType()==OP_BUY) OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 100, CLR_NONE);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 100, CLR_NONE);
}

double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
double l=0;
int i,k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderSymbol()==sy || sy=="") if (OrderType()==OP_BUY || OrderType()==OP_SELL) if (op<0 || OrderType()==op) if (mn<0 || OrderMagicNumber()==mn) l+=OrderLots();
return(l);
}

bool notakeprofit(){
bool ok=true;
for (int i=OrdersTotal(); i >=0; i--) if ( OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderSymbol() == Symbol() && OrderTakeProfit()>0){ OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(),NormalizeDouble(0,Digits), 0, CLR_NONE);ok=false;return(ok);}
return(ok);
}

double NormalizeLot(double lo, bool ro=True, string sy="") {
double l, k;
if (sy=="" || sy=="0") sy=Symbol();
double ls=MarketInfo(sy, MODE_LOTSTEP);
double ml=MarketInfo(sy, MODE_MINLOT);
double mx=MarketInfo(sy, MODE_MAXLOT);
if (ml==0) ml=0.1;
if (mx==0) mx=100;
if (ls>0) k=1/ls; else k=1/ml;
if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;
if (l<ml) l=ml;
if (l>mx) l=mx;
return(l);
}
[свернуть]
Вложения:
Тип файла: mq4 425_Ilan1.6_PipStep.mq4 (25.4 Кб, 7 просмотров)

Последний раз редактировалось NSerega; 05.03.2013 в 18:12.
maks5317 вне форума Ответить с цитированиемОтветить с цитированием  
05.03.2013, 18:12
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,027 раз(а) / Репутация: 9027
  • Отправить сообщение для eevviill с помощью Skype™
Сообщение от maks5317 Посмотреть сообщение
...
Думаю тебе не помогут. Чтобы разобратся в том что ты написал надо потратить много времени.
Ты лучше сначало ставь основу. Пробуй. Работает, значит дальше ещё что то прикрепляй. Работает, и т.д.
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
05.03.2013, 18:16
Аватар для eevviill
eevviill Заблокирован
За второе место в конкурсе 

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

Проблема:

Как удалить отложенный ордер, если на этой цене уже есть такой же.

Задача:

Поставить отложенный ордер, если на этой цене уже есть полностью идентичный ордер, удалить предыдущий!

Спасибо!
Ну думаю перебором ордеров.
В цыкле пишешь условие что если OrderOpenPrice()==необходимая цена, то OrderDelete()
eevviill вне форума Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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