Ответить
02.01.2012, 11:18
Аватар для ivan1234
ivan1234 ivan1234 вне форума Новичок форума
Регистрация: 23.07.2010 / Сообщений: 32
Поблагодарили 10 раз(а) / Репутация: 11
ничего не понятно, с виду 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
02.01.2012, 11:18
Аватар для Lender
Lender Lender вне форума Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
Здравствуйте. Хотел бы узнать.
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.
02.01.2012, 11:28
Аватар для Lender
Lender Lender вне форума Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
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 ... 
02.01.2012, 11:55
Аватар для ivan1234
ivan1234 ivan1234 вне форума Новичок форума
Регистрация: 23.07.2010 / Сообщений: 32
Поблагодарили 10 раз(а) / Репутация: 11

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

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
02.01.2012, 16:30
Аватар для lexun
lexun lexun вне форума Активный участник
Регистрация: 12.12.2010 / Сообщений: 106
Поблагодарили 69 раз(а) / Репутация: 70
Lender, спасибо за ответ. Сейчас пока не могу опробовать, потом сделаю, только вот опять вопросы.
Если у меня нельзя сначалв узнать размерность массива т.е. он динамический, как тогда.
Вроде как не пробовал в mql помоему у меня пишет что нет таких команд как IntToStr, ну и как думаю что и DoubleToStr.
И еще: как нормально вывести дату в Alert. Если просто выводит то как я понимаю вылезет количество секунд ...,
команда MessageBox вроде как обрабатывается нормально, но почему то ничего не выводит, должна ли, или ее уже вывели из работы. Огромное спасибо
03.01.2012, 13:33
Аватар для Lender
Lender Lender вне форума Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
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.
lexun , SlavaR 
11.01.2012, 19:45
Аватар для Aleh#
Aleh# Aleh# вне форума Прохожий
Регистрация: 08.01.2012 / Сообщений: 2
Поблагодарили 0 раз(а) / Репутация: 1
Прошу прощение ,что не совсем по теме,может есть здесь специ которые могут переделать мои советник из mq4 в джава.(под дуаскопи ,Jforex).
16.01.2012, 13:19
Аватар для denss22
denss22 denss22 вне форума Интересующийся
Регистрация: 16.01.2012 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 3

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

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

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

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

octopus_2.ex4
26.01.2012, 10:29
Аватар для Corey Hate
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 баров от текущего?
26.01.2012, 19:35
Аватар для Lender
Lender Lender вне форума Активный участник
Регистрация: 19.07.2011 / Сообщений: 56
Поблагодарили 74 раз(а) / Репутация: 75
  • Отправить сообщение для Lender с помощью Skype™
i - целое число которое в цикле перебирается от 3 до 300, (3, 4, 5, ..., 298, 299)

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

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

Привет. Делаю иланоподобный сов, но не могу написать функцию для расчета безубытка. Например есть серия ордеров buy, открытых через 20 пунктов одинаковыми или разными лотами. Где нашел это считается как (сумма цен открыия * лот) деленная на сумму лотов. Но это же неправильно.
30.01.2012, 09:25
Аватар для Energetik777
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;
}
}
}
}
}
}
30.01.2012, 22:47
Аватар для seb29
seb29 seb29 вне форума Интересующийся
Регистрация: 21.01.2010 / Сообщений: 1
Поблагодарили 0 раз(а) / Репутация: 1

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

Добрый день.

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

31.01.2012, 21:12
Аватар для PAZITIV
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


Уважаемые, прошу помощи
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 cfifcfif вне форума Элитный участник
Регистрация: 22.07.2011 / Адрес: краснодар / Сообщений: 1,403
Поблагодарили 1,425 раз(а) / Репутация: 1427
  • Отправить сообщение для cfifcfif с помощью Skype™
Ребят у меня такой вопрос может он глупый ещё незнаю, если в журнале выдоёт иногда ошибку повлияет это ли навывод средств заработаные совой хотя в соседней строчке эксперты не одной ошибки.
08.02.2012, 15:07
Аватар для Чико
Чико Чико на форуме Местный житель
За призовое место в конкурсе 

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

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


Опции темы

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

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



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


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