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

Код:
if (trend > 0) UpBuffer[shift] = MABuffer;
      else if (trend < 0) DnBuffer[shift] = MABuffer;
Помогите из них добыть сигналы buy u sell
brend вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 28.02.2013, 17:06   #1008 (permalink)
Интересующийся
 
Аватар для brend
 
Регистрация: 27.12.2012
Сообщений: 3
Репутация: 1
brend
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 4
Здравствуйте!
Хочу попробовать к советнику из учебника прикрутить индикатор. В индикаторе есть строки :
Код:
if (trend > 0) UpBuffer[shift] = MABuffer;
      else if (trend < 0) DnBuffer[shift] = MABuffer;
Помогите, пожалуйста, добыть из них сигналы buy u sell
brend вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 28.02.2013, 18:58   #1009 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3645
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,649 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от 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   #1010 (permalink)
Интересующийся
 
Аватар для brend
 
Регистрация: 27.12.2012
Сообщений: 3
Репутация: 1
brend
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 4
Сообщение от AlexeyVik Посмотреть сообщение
Ставишь на график индикатор. В свойствах на закладке "Цвет" смотришь Какая цифра слева от интересующего тебя цвета. Это и есть номер буфера. Этот номер и надо ставить в функцию iCustom(string symbol, int timeframe, string name, ..., int mode, int shift)

Спасибо! Буду пробовать
brend вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 04.03.2013, 10:02   #1011 (permalink)
Интересующийся
 
Аватар для Corey Hate
 
Регистрация: 11.11.2010
Адрес: Белорецк
Сообщений: 8
Репутация: 4
Corey Hate
Сказал(а) спасибо: 7
Поблагодарили 3 раз(а) в 3 сообщениях
Поинты: 0
Здравствуйте! Помогите, пожалуйста, разобраться с функцией Hour(). Мне не понятно следующее: ноль возвращается с 23:00:01 до 0:00:00 или с 0:00:01 до 1:00:00?
Corey Hate вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 04.03.2013, 10:18   #1012 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от 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   #1013 (permalink)
Местный житель
 
Аватар для jib07
 
Регистрация: 11.04.2011
Сообщений: 336
Репутация: 270
jib07 jib07 jib07
Сказал(а) спасибо: 180
Поблагодарили 269 раз(а) в 125 сообщениях
Поинты: 470
Здравствуйте! Сломал всю голову, ничего не смог придумать, помогите.

Проблема:

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

Задача:

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

Спасибо!
jib07 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.03.2013, 14:15   #1014 (permalink)
Местный житель
 
Аватар для sbmill
 
Регистрация: 14.12.2009
Сообщений: 217
Репутация: 210
sbmill - sbmill - sbmill -
Сказал(а) спасибо: 126
Поблагодарили 211 раз(а) в 103 сообщениях
Поинты: 196
Здравствуйте!!!
Пишу первый простенький индикатор по расхождению валютных курсов 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   #1015 (permalink)
Почётный гражданин
 
Аватар для qqmber
 
Регистрация: 20.01.2013
Сообщений: 530
Репутация: 386
qqmber - qqmber - qqmber - qqmber -
Сказал(а) спасибо: 57
Поблагодарили 386 раз(а) в 254 сообщениях
Поинты: 439
Сообщение от 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   #1016 (permalink)
Местный житель
 
Аватар для sbmill
 
Регистрация: 14.12.2009
Сообщений: 217
Репутация: 210
sbmill - sbmill - sbmill -
Сказал(а) спасибо: 126
Поблагодарили 211 раз(а) в 103 сообщениях
Поинты: 196
Сообщение от 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   #1017 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3645
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,649 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от 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   #1018 (permalink)
Активный участник
 
Аватар для maks5317
 
Регистрация: 21.12.2012
Сообщений: 37
Репутация: 31
maks5317
Сказал(а) спасибо: 9
Поблагодарили 30 раз(а) в 15 сообщениях
Поинты: 10
проясните ситуевину?вкрутил лок,но помоему один алгоритм мешает другому?посмотрите не проходите мимо?

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

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 Кб, 6 просмотров)

Последний раз редактировалось NSerega; 05.03.2013 в 18:12.
maks5317 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.03.2013, 18:12   #1019 (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™
Сообщение от maks5317 Посмотреть сообщение
...
Думаю тебе не помогут. Чтобы разобратся в том что ты написал надо потратить много времени.
Ты лучше сначало ставь основу. Пробуй. Работает, значит дальше ещё что то прикрепляй. Работает, и т.д.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.03.2013, 18:16   #1020 (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™
Сообщение от jib07 Посмотреть сообщение
Здравствуйте! Сломал всю голову, ничего не смог придумать, помогите.

Проблема:

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

Задача:

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

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

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


Опции темы

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

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



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


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