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

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

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

Проблема:

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

Задача:

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

Спасибо!
05.03.2013, 14:15
Аватар для sbmill
sbmill sbmill вне форума Местный житель
Регистрация: 14.12.2009 / Сообщений: 220
Поблагодарили 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];
05.03.2013, 14:22
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Здравствуйте!!!
... чтобы расчет производился по валютной паре USDCAD, когда индикатор устанавливаешь на график GBPUSD.
Чтобы получить котировку другой пары используйте функцию
double iClose( string symbol, int timeframe, int shift)
05.03.2013, 17:19
Аватар для sbmill
sbmill sbmill вне форума Местный житель
Регистрация: 14.12.2009 / Сообщений: 220
Поблагодарили 211 раз(а) / Репутация: 210
Чтобы получить котировку другой пары используйте функцию
double iClose( string symbol, int timeframe, int shift)
Подставил функцию, при компиляции выдает ошибку iClose variable expected
Buf_1[i]=(5000*1.0199)-(5000*double iClose("USDCAD",0,i));
05.03.2013, 17:24
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Подставил функцию, при компиляции выдает ошибку iClose variable expected
Buf_1[i]=(5000*1.0199)-(5000*double iClose("USDCAD",0,i));
Убери double и будет тебе счастье.
05.03.2013, 17:29
Аватар для maks5317
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);
}
[свернуть]

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

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

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

Проблема:

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

Задача:

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

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

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


Опции темы

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

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



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


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