Ответ
 
Опции темы
02.01.2012, 11:18
Аватар для ivan1234
ivan1234 Новичок форума
Регистрация: 23.07.2010 / Сообщений: 32
Поблагодарили 10 раз(а) / Репутация: 11
Сообщение от Lender Посмотреть сообщение
ничего не понятно, с виду 10+0.01 = 10.01, а у тебя аж 20...

может тебе нужно clossprofit = clossprofit*lot ?
тогда clossprofit будет увеличиваться пропорционально лоту
mne nado shtob gogda lot=0.01 clossprofit=10, lot=0.02 clossprofit=20...
lot=0.1 clossprofit=100. kakto tak
ivan1234 вне форума Ответить с цитированиемОтветить с цитированием  
02.01.2012, 11:18
Аватар для Lender
Lender Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
Сообщение от lexun Посмотреть сообщение
Здравствуйте. Хотел бы узнать.
double massiv1[];
...
int start()
{
massiv1[1]=2;
Alert(massiv1[1]);
...

Выводит 0.
Вообщем проблема в том что не могу вывести значения массивов.
Даже если будет:
int massiv1[];
string a;
...
int start()
{
massiv1[1]=2;
a=massiv[1];
Alert(a);
...
один хрен вылезет 0. Почему и как лечить ся?
double massiv1[]; // <-- создаем ссылку на область памяти, если размер не задан, то и памяти под массив не выделяется
// нужно сделать так:
int size = 10;
ArrayResize(massiv1, size); // выделяем нужное кол-во памяти, и устанавливаем на ее ссылку(задаем размер нашего массива)

massiv1[1]=2;
Alert(massiv1[1]); // вуаля, печатает то что нужно

//----------------------------------------------------------------
// в следуюжем примере

int massiv1[];
string a;

...
a=massiv[1]; // не корректно записывать в string int
// нужно так
a = DoubleToStr( massiv[1, 0 )

Последний раз редактировалось Lender; 02.01.2012 в 11:24.
Lender вне форума Ответить с цитированиемОтветить с цитированием  
02.01.2012, 11:28
Аватар для Lender
Lender Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
Сообщение от ivan1234 Посмотреть сообщение
mne nado shtob gogda lot=0.01 clossprofit=10, lot=0.02 clossprofit=20...
lot=0.1 clossprofit=100. kakto tak
PHP код:
double koef 1000// в сколько раз увеличивать лот
double lot 0.01
double clossprofit 
lot koef // 0.01 * 1000 = 10 ... 
Lender вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
ivan1234 (02.01.2012)
02.01.2012, 11:55
Аватар для ivan1234
ivan1234 Новичок форума
Регистрация: 23.07.2010 / Сообщений: 32
Поблагодарили 10 раз(а) / Репутация: 11

По умолчанию help


Сообщение от Lender Посмотреть сообщение
PHP код:
double koef 1000// в сколько раз увеличивать лот
double lot 0.01
double clossprofit 
lot koef // 0.01 * 1000 = 10 ... 
ne moglibi vi vstaviti v sov, ato u menea nicevo ne poluciaetsa
Вложения:
Тип файла: mq4 cm_EA_TrailingLimitOrders+1,4(1).mq4 (13.2 Кб, 43 просмотров)
ivan1234 вне форума Ответить с цитированиемОтветить с цитированием  
02.01.2012, 16:30
Аватар для lexun
lexun Активный участник
Регистрация: 12.12.2010 / Сообщений: 106
Поблагодарили 69 раз(а) / Репутация: 70
Lender, спасибо за ответ. Сейчас пока не могу опробовать, потом сделаю, только вот опять вопросы.
Если у меня нельзя сначалв узнать размерность массива т.е. он динамический, как тогда.
Вроде как не пробовал в mql помоему у меня пишет что нет таких команд как IntToStr, ну и как думаю что и DoubleToStr.
И еще: как нормально вывести дату в Alert. Если просто выводит то как я понимаю вылезет количество секунд ...,
команда MessageBox вроде как обрабатывается нормально, но почему то ничего не выводит, должна ли, или ее уже вывели из работы. Огромное спасибо
lexun вне форума Ответить с цитированиемОтветить с цитированием  
03.01.2012, 13:33
Аватар для Lender
Lender Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
Сообщение от lexun Посмотреть сообщение
Lender, спасибо за ответ. Сейчас пока не могу опробовать, потом сделаю, только вот опять вопросы.
Если у меня нельзя сначалв узнать размерность массива т.е. он динамический, как тогда.
Вроде как не пробовал в mql помоему у меня пишет что нет таких команд как IntToStr, ну и как думаю что и DoubleToStr.
И еще: как нормально вывести дату в Alert. Если просто выводит то как я понимаю вылезет количество секунд ...,
команда MessageBox вроде как обрабатывается нормально, но почему то ничего не выводит, должна ли, или ее уже вывели из работы. Огромное спасибо
выделяем память для массива с запасом не без фанатизма

IntToStr у меня тоже нет а DoubleToStr есть

в MessageBox(TimeCurrent()) - не работает, так как требуется параметер string а не datetime
юзаем TimeToStr() для отображения времени в виде строки

читаем хелп:
Цитата:
void Alert( ...)
Отображает диалоговое окно, содержащие пользовательские данные. Параметры могут быть любого типа. Количество параметров не может превышать 64.

Массивы нельзя передавать в функцию Alert(). Массивы должны выводиться поэлементно.

Данные типа double выводятся с 4 десятичными цифрами после точки. Для вывода чисел с большей точностью используйте функцию DoubleToStr().
Данные типы bool, datetime и color будут выведены как числа.
Чтобы вывести данные типа datetime в виде строки, необходимо использовать функцию TimeToStr().

Для разделения выводимой информации на несколько строк можно использовать символ перевода строки "\n" либо "\r\n".
См. также функции Comment() и Print().
Параметры:
... - Любые значения, разделенные запятыми.

Пример:
if(Close[0]>SignalLevel)
Alert("Price ", Close[0]," is coming!!!");

Последний раз редактировалось Lender; 03.01.2012 в 13:39.
Lender вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
lexun (03.01.2012), SlavaR (02.10.2012)
11.01.2012, 19:45
Аватар для Aleh#
Aleh# Прохожий
Регистрация: 08.01.2012 / Сообщений: 2
Поблагодарили 0 раз(а) / Репутация: 1
Прошу прощение ,что не совсем по теме,может есть здесь специ которые могут переделать мои советник из mq4 в джава.(под дуаскопи ,Jforex).
Aleh# вне форума Ответить с цитированиемОтветить с цитированием  
16.01.2012, 13:19
Аватар для denss22
denss22 Интересующийся
Регистрация: 16.01.2012 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1

По умолчанию Вопрос к програмистам. Добавить выбор направления открытия ордеров.


Здравствуйте!!!
Ребята Помогите пожалуйста в решении одного простого (для Вас) вопроса.
В советнике необходимо поставить выбор направления торговли (sell или buy).Т. к. он ставит ордера от балды, потом локом их выводит. После именения его эффективность резко возрастет.
Заранее огромное СПАСИБО!!!
Вложения:
Тип файла: mq4 ShockBar v.1.1.mq4 (26.3 Кб, 53 просмотров)
denss22 вне форума Ответить с цитированиемОтветить с цитированием  
19.01.2012, 08:33
Аватар для Lender
Lender Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
при кидании советников на график можно задавать в какую сторону разрешено торговать советникам
Миниатюры:
Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 46
Размер:	153.6 Кб
ID:	62090  
Lender вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
denss22 (19.01.2012)
19.01.2012, 08:44
Аватар для denss22
denss22 Интересующийся
Регистрация: 16.01.2012 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
Сообщение от Lender Посмотреть сообщение
при кидании советников на график можно задавать в какую сторону разрешено торговать советникам
Спасибо большое! Разобрался!
Отличный получился советник, когда работает в два направления не дает большой просадки и больше зарабатывает!!!
denss22 вне форума Ответить с цитированиемОтветить с цитированием  
23.01.2012, 03:39
Аватар для Gek34
Gek34 Интересующийся
Регистрация: 12.02.2010 / Сообщений: 2
Поблагодарили 1 раз в 1 сообщении / Репутация: 2

По умолчанию Подскажите неучу


подскажите пожалуйска как задать условие, чтобы при смене цвета индикатора поступала команда на ( открытие ,закрытие) ордера.
индикатор прилагается

octopus_2.ex4
Gek34 вне форума Ответить с цитированиемОтветить с цитированием  
26.01.2012, 10:29
Аватар для Corey Hate
Corey Hate Интересующийся
Регистрация: 11.11.2010 / Адрес: Белорецк / Сообщений: 8
Поблагодарили 3 раз(а) / Репутация: 4
Здравствуйте! Помогите, пожалуйста, разобраться с кодом.

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

double FrUp,FrDn;
for (int i=3; i<300; i++)
{
FrUp = NormalizeDouble(iFractals(NULL,0,MODE_UPPER,i), Digits);
if (FrUp!=0) {FrUp = FrUp+Delta*Point; if (Ask+STOPLEVEL*Point < FrUp) break;}
FrUp=0;
[свернуть]

Меня интересует "i". Не могу понять, в вышеприведенном коде, описан поиск последнего верхнего фрактала или самого верхнего на всем расстоянии в 300 баров от текущего?
Corey Hate вне форума Ответить с цитированиемОтветить с цитированием  
26.01.2012, 19:35
Аватар для Lender
Lender Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
i - целое число которое в цикле перебирается от 3 до 300, (3, 4, 5, ..., 298, 299)

в указанном отрывке мы ищем первый фрактал который выше Ask+STOPLEVEL
Lender вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Corey Hate (31.01.2012)
28.01.2012, 13:54
Аватар для anonimmmmm
anonimmmmm Новичок форума
Регистрация: 11.06.2011 / Сообщений: 119
Поблагодарили 8 раз(а) / Репутация: 9

По умолчанию Помогите с безубытком


Привет. Делаю иланоподобный сов, но не могу написать функцию для расчета безубытка. Например есть серия ордеров buy, открытых через 20 пунктов одинаковыми или разными лотами. Где нашел это считается как (сумма цен открыия * лот) деленная на сумму лотов. Но это же неправильно.
anonimmmmm вне форума Ответить с цитированиемОтветить с цитированием  
30.01.2012, 09:25
Аватар для Energetik777
Energetik777 Активный участник
Регистрация: 17.07.2011 / Сообщений: 70
Поблагодарили 39 раз(а) / Репутация: 40
Здравствуйте. Подскажите пожалуйста как правильно составить функцию поиска наибольшей цены открытия ордера среди открытых ордеров?
У меня получился такой код, но он не дает нужного результата. Заранее спасибо.

void Max_cena_buy(string sy="", int op=-1, int mn=-1) {
double max_buy=0;
int i, k=OrdersTotal(), np=-1;

if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (OrderType()==OP_BUY)) {
if (OrderMagicNumber()==mn) {
if (max_buy<OrderOpenPrice()) {
max_buy=OrderOpenPrice();
np=i;
}
}
}
}
}
}
Energetik777 вне форума Ответить с цитированиемОтветить с цитированием  
30.01.2012, 22:47
Аватар для seb29
seb29 Интересующийся
Регистрация: 21.01.2010 / Сообщений: 1
Поблагодарили 0 раз(а) / Репутация: 1

По умолчанию Кто знает ..поможите с добавлением функции в код.


Добрый день.

Как и какую функцию (переменную) надо добавить в код советника, что бы исполнения кода было с задержкой в секундах.? (то есть советник не сразу открывает ордер при появлении своего сигнала, а с задержкой) .

seb29 вне форума Ответить с цитированиемОтветить с цитированием  
31.01.2012, 21:12
Аватар для PAZITIV
PAZITIV Интересующийся
Регистрация: 29.01.2012 / Сообщений: 5
Поблагодарили 1 раз в 1 сообщении / Репутация: 2

Фундаментальный анализ советник на основе QQEA


в общем, получается идея советника такая: когда красная линия пересекает жёлтую снизу вверх, должен открыться один ордер на Buy (и закрыться на SELL -- если есть), когда красная пересекает жёлтую вверху вниз -- один ордер на Sell (и закрыться Buy -- если есть). Но у меня не получается открыть только один ордер. Ордера открываются , пока выполняется условие -- т.е. на каждом баре. Как открыть только одну сделку

ЗЫ в iCustom костыльно сделано через стринг потому что напрямую через дабл ересь какую то выдавало

код советника

//+------------------------------------------------------------------+
//| QQEA-Advisor.mq4 |
//| Copyright © 2012, PAZITIV |
//| pazitiv.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, PAZITIV"
#property link "pazitiv.net"

//--- input parameters
extern double MaxRisk=1.0;
extern double FixLot = 0.01;
extern double Exponent=2.0;
extern int Magic = 888;

// костыли

extern int TakeProfit=100;
extern int StopLoss=100;




//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int Count=0;
double b0,b1;
int ticket;





// параметры индикатора
int SF = 5; // original 5
int RSI_Period = 14; // original 14
double DARFACTOR = 4.236; //original 4.236

//------------ Параметры из индикатора QQEA -----------------------
// Buffer0 -- красная жирная
string Buffer0 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,0 , 0);
// Buffer1 -- жёлтый пунктир
string Buffer1 = iCustom(NULL, 0, "QQEA" , SF, RSI_Period, DARFACTOR,1 , 0);



b0=StrToDouble(Buffer0);
b1=StrToDouble(Buffer1);


double Lot=GetLot(MaxRisk);


// если лот <0 выводим сообщение об ошибке
if(Lot==0)
{
Alert("Недостаточно средств!");
return(0);
}


if (Lot!=0 && b0>b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_BUY,Lot);
if (ExistOrders(Symbol(), 1, 888, 0) == true ) // проверяем наличие ордера sell
{
CloseOrder();
}
}


if (Lot!=0 && b0<b1) // если лот <> 0 и красная выше жёлтой
{
ticket=NewOrder(OP_SELL,Lot);
if (ExistOrders(Symbol(), 0, 888, 0) == true ) // проверяем наличие ордера buy
{
CloseOrder();
}
}





Comment("Red line: ",b0,"Yellow line: ",b1);



return(0);
}







//-------------------------------------------------------------
//расчёт лота

double GetLot(int Risk)
{double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
if(Lot<Min_Lot) Lot=Min_Lot;
if(Lot>Max_Lot) Lot=Max_Lot;
if(Lot*One_Lot>Free) return(0.0);
return(Lot);}


bool ExistOrders(string sy="", int op=-1, int Magic=-1, datetime ot=0)
{
int i, k=OrdersTotal(), ty;

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ty=OrderType();
if (ty>1 && ty<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
if (Magic<0 || OrderMagicNumber()==Magic) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
return(False);
}


//открытие нового ордера
int NewOrder(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUY)
{PR=Ask;
if(TakeProfit>0) TP=Ask+TakeProfit*Point;
if(StopLoss>0) SL=Ask-StopLoss*Point;}
if(Cmd==OP_SELL)
{PR=Bid;
if(TakeProfit>0) TP=Bid-TakeProfit*Point;
if(StopLoss>0) SL=Bid+StopLoss*Point;}
int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP," ",0,0,Green);
if(tic<0) Print("Ошибка открытия ордера: " ,GetLastError());
return(tic);}


// закрытие ордера
void CloseOrder()
{double PR=0;
while(!IsTradeAllowed()) Sleep(100);
if(OrderType()==OP_BUY) PR=Bid;
if(OrderType()==OP_SELL) PR=Ask;
if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red))
Print("Ошибка закрытия ордера: " ,GetLastError());
return;}
[свернуть]

иллюстрация работы

[свернуть]

сам индикатор -- QQEA.mq4


Уважаемые, прошу помощи
PAZITIV вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Pers777 (02.04.2014)
04.02.2012, 05:44
Аватар для Сергей Александрович
Сергей Александрович Интересующийся
Регистрация: 08.12.2011 / Сообщений: 6
Поблагодарили 0 раз(а) / Репутация: 1
Добрый день!
Подскажите где найти расшифровку кодов (смотри ниже). Хочу уменьшить количество открываемых ордеров и LotExponent, но не могу найти шифр этих кодов:

int gi_96 = 0;
double gd_100 = 0.0;
int gi_108 = 1;
int gi_112 = 2;
int gi_116 = 14;
int gi_120 = 3;
bool gi_124 = FALSE;
bool gi_128 = FALSE;
bool gi_132 = TRUE;
bool gi_136 = TRUE;
bool gi_140 = FALSE;
double gd_unused_144 = 0.0;
Сергей Александрович вне форума Ответить с цитированиемОтветить с цитированием  
08.02.2012, 15:04
Аватар для cfifcfif
cfifcfif Элитный участник
Регистрация: 22.07.2011 / Адрес: краснодар / Сообщений: 1,403
Поблагодарили 1,423 раз(а) / Репутация: 1425
  • Отправить сообщение для cfifcfif с помощью Skype™
Ребят у меня такой вопрос может он глупый ещё незнаю, если в журнале выдоёт иногда ошибку повлияет это ли навывод средств заработаные совой хотя в соседней строчке эксперты не одной ошибки.
cfifcfif вне форума Ответить с цитированиемОтветить с цитированием  
08.02.2012, 15:07
Аватар для Чико
Чико Местный житель
За призовое место в конкурсе 

Регистрация: 14.03.2010 / Сообщений: 613
Поблагодарили 281 раз(а) / Репутация: 285
Сообщение от cfifcfif Посмотреть сообщение
Ребят у меня такой вопрос может он глупый ещё незнаю, если в журнале выдоёт иногда ошибку повлияет это ли навывод средств заработаные совой хотя в соседней строчке эксперты не одной ошибки.
Не влияет,если сова пашет в пределах регламента по времени удержания ордера и количеству взятых пипсов-у некоторых ДЦ есть ограничения..
Чико на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
cfifcfif (08.02.2012)
Ответ

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


Опции темы

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

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



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


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