Ваши вопросы по языку MQL4

Leonup

Новичок форума
Убыток в пунктах

Здравствуйте!

Итог графы Прибыль в терминале показывает сумму прибыли или убытков.
Меня интересует сумма убытков. Допустим, по одному инструменту открыто несколько ордеров, и общий итог – Убыток.
И если OrderProfit() разделить на Point:
OrderProfit() / Point,
то ведь получится сумма убытка в пунктах (с учетом свопов)?
Если это правильно, то, странно, что в журнал выводятся огромные непонятные числа, например, order_profit (это у меня переменная) = -79092000.
Или по этой формуле рассчитывать неправильно? А тогда как будет правильно?
Спасибо.
 

ansol

Местный знаток
Точно не пил?оО Как-то так:

PHP:
      fOpenBuy = dGreen > iHigh(sSymbol, iTF, Kijun) &&
                  dBid > dRed &&
                  dRed > dBlue &&
                  dBlue > SenkouSpanA &&
                  dBlue > SenkouSpanB &&
                  (dRed - dBlue) > (dRedT - dBlueT)
Точно! :)
Да не, без скобок все работает. Невнимательность меня, как обычно, подвела, параметры Ишимоку на входе неверно задал ;) Я поэтому и пишу Red, Blue, Green, что не запоминаю тенканы-киджуны.
Кстати, очень метко входит именно по этой комбинации - парад линий после креста.
 

ansol

Местный знаток
Здравствуйте!

Итог графы Прибыль в терминале показывает сумму прибыли или убытков.
Меня интересует сумма убытков. Допустим, по одному инструменту открыто несколько ордеров, и общий итог – Убыток.
И если OrderProfit() разделить на Point:
OrderProfit() / Point,
то ведь получится сумма убытка в пунктах (с учетом свопов)?
Если это правильно, то, странно, что в журнал выводятся огромные непонятные числа, например, order_profit (это у меня переменная) = -79092000.
Или по этой формуле рассчитывать неправильно? А тогда как будет правильно?
Спасибо.
Зачем это профит делить на Пойнт? оО
OrderProfit() выдает результат в валюте депозита, только складывай по всем ордерам и все
Свопы надо отдельно учитывать через OrderSwap(), комиссию через OrderCommision()
 

Leonup

Новичок форума
Зачем это профит делить на Пойнт? оО
OrderProfit() выдает результат в валюте депозита, только складывай по всем ордерам и все
Свопы надо отдельно учитывать через OrderSwap(), комиссию через OrderCommision()

Мне нужна сумма убытков в пунктах, а т.к. открыты ордера по одной валютной паре, поэтому, думаю, надо делить всю сумму на Point.
 

ansol

Местный знаток
Мне нужна сумма убытков в пунктах, а т.к. открыты ордера по одной валютной паре, поэтому, думаю, надо делить всю сумму на Point.

:)
Надо хорошо подумать:
PHP:
int iProfit = OrderProfit()/(MarketInfo(Symbol(), MODE_TICKVALUE)*OrderLots());
Поинты тут ни при чем
 

hoz

Активный участник
Точно! :)
Да не, без скобок все работает.

Не согласен. Без скобок другое условие уже. А работать может и без них... ;)


Невнимательность меня, как обычно, подвела, параметры Ишимоку на входе неверно задал ;) Я поэтому и пишу Red, Blue, Green, что не запоминаю тенканы-киджуны.
Кстати, очень метко входит именно по этой комбинации - парад линий после креста.

У нас вообще невнимательность - главный враг. Я свои косяки разгребал сколько раз, так чаще глупые ошибки, ежели что-то посерьёзнее. А ищем то обычно нечто такое, что типа сложное якобы.
Кстати, хз что там с Ишимоку, но мне машки ближе к телу.
 

Milord

Местный знаток
Господа проггеры - есть у вас сова самая простая?

малость подзабыл язык, из-за перерыва...хотел бы освежить память, от простого к сложному...есть у кого нибудь рабочая сова, с самым маленьким размером кода, работающая по любому алгоритму, а то глянешь внутрь и глаза разбегаются от обилия строчек кода)):D
самый простой Илан 1.6 динамик оказался в 433 строки кода, объемом 21килобайт...
если у кого есть такой сов, скиньте плиз в ветку, заранее СПАСИБО!
 
Последнее редактирование:

virtuous

Интересующийся
Здравствуйте!
Неделю назад начал изучать MQL4, много непонятно, поэтому понадобилась помощь опытных людей.
Сделал сетку из 4 отложенных ордеров в установленное время на пробой максимального и минимального значения:
покупка с фиксированным профитом и без профита и аналогичная продажа.

extern double Time_Open=; // Время открытия ордеров
extern double Lot=; // лот
extern double TP=; // тейк-профит, пунктов от текущей цены
extern int _Time_=; //количество баров для поиска High и Low

int start()
{
int Cur_Hour=Hour(); // Серверное время в часах
double Cur_Min = Minute(); // Серверное время в минутах
double Cur_time=Cur_Hour + Cur_Min/100; // Текущее время
double _High_=iHigh(NULL,PERIOD_M15,iHighest(NULL,PERIOD_M15,MODE_HIGH,_Time_,1)); // находим значение High
double _Low_=iLow(NULL,PERIOD_M15,iLowest(NULL,PERIOD_M15,MODE_LOW,_Time_,1)); // находим значение Low

if (Time_Open==Cur_time) // Если наступило время события
{
int ticket1=OrderSend(Symbol(),OP_BUYSTOP,Lot,_High_,0,_Low_,_High_+TP*Point,0,0,0,Blue); //отложенный на покупку с ТП
int ticket2=OrderSend(Symbol(),OP_BUYSTOP,Lot,_High_,0,_Low_,0,0,0,0,Blue); //отложенный на покупку без ТП
int ticket3=OrderSend(Symbol(),OP_SELLSTOP,Lot,_Low_,0,_High_,_Low_-TP*Point,0,0,0,Red); //отложенный на продажу с ТП
int ticket4=OrderSend(Symbol(),OP_SELLSTOP,Lot,_Low_,0,_High_,0,0,0,0,Red); //отложенный на продажу без ТП
}

return;
}


Все работает, но в неограниченном количестве ) на тесте открылось 348 ордеров :)
Как их ограничить до требуемых 4.
Очень надеюсь на помощь, спасибо :)
 

Milord

Местный знаток
помогите плиз найти ошибку???

тут накидал кусок кода совы, при компиляции выдает ошибку, не могу найти, гляньте своим зорким взглядом, может увидите...заранее СПАСИБО!
int start()
{
//----
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)
{
if(Bid>iMA(NULL,0,MAPeriod, MAShift,MODE_EMA,PRICE_CLOSE,1);
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask-SL*Point,Ask+TP*Point,0,Magic,0,Green);
}
}

{
if(Bid<iMA(NULL,0,MAPeriod,MAShift,MODE_EMA,PRICE_CLOSE,1);
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Bid+SL*Point,Bid-TP*Point,0,Magic,0,Green);
}
}
//----------------------------------------------
return(0);
}
будет ли в принципе этот кусок кода работать в сове?
 
Последнее редактирование:

Рыболов

Новичок форума
int start()
{
//----
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False )
{
if(Bid>iMA(Symbol(),PERIOD_H1,0,21,0,1,4,0)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask-SL*Point,Ask+TP*Point,0,Magic,0,Green);
}
if(Bid<iMA(Symbol(),PERIOD_H1,0,21,0,1,4,0)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Bid+SL*Point ,Bid-TP*Point,0,Magic,0,Green);
}

//----------------------------------------------
return(0);
}


помойму так лучше будет и можно без скобок если 1 оператор после if

Почисть историю личных сообщений а то отправить не могу тебе лс
 

Milord

Местный знаток
int start()
{
//----
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False )
{
if(Bid>iMA(Symbol(),PERIOD_H1,0,21,0,1,4,0)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask-SL*Point,Ask+TP*Point,0,Magic,0,Green);
}
if(Bid<iMA(Symbol(),PERIOD_H1,0,21,0,1,4,0)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Bid+SL*Point ,Bid-TP*Point,0,Magic,0,Green);
}

//----------------------------------------------
return(0);
}


помойму так лучше будет и можно без скобок если 1 оператор после if

Почисть историю личных сообщений а то отправить не могу тебе лс
сообщения почистил....
код при компиляции стал выдавать 2 ошибки, вместо прежней 1-й)
не хватало 1й скобки фигурной, их число должно быть четным...но все равно выдает 1 ошибку
вот код что щас есть, число скобок четное, где ошибка непойму???
int start()
{
//----
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False )
{
if(Bid>iMA(Symbol(),PERIOD_H1,0,21,0,1,4,0)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Ask-SL*Point,Ask+TP*Point,0,Magic,0,Green);
}

if(Bid<iMA(Symbol(),PERIOD_H1,0,21,0,1,4,0)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Bid+SL*Point ,Bid-TP*Point,0,Magic,0,Green);
}
}
/----------------------------------------------
return(0);
}
 
Последнее редактирование:

qqmber

Почетный гражданин
Очень надеюсь на помощь, спасибо :)
Дорогой ньюб,
чтобы надеяться на помощь по логике, надо показывать код, компилирующийся без ошибок. Иначе это будет вопрос из серии "где я накосячил в синтаксисе".
extern double Time_Open=; // Время открытия ордеров
Вот это выше сразу мимо. Нельзя переменную инициализировать ничем.
 

virtuous

Интересующийся
Дорогой ньюб,
чтобы надеяться на помощь по логике, надо показывать код, компилирующийся без ошибок. Иначе это будет вопрос из серии "где я накосячил в синтаксисе".
extern double Time_Open=; // Время открытия ордеров
Вот это выше сразу мимо. Нельзя переменную инициализировать ничем.

код компилируется без ошибок. я просто переменные не заполнял. достаточно было ввести время любое и количество баров для поиска и все заработало бы.
Очень долго ждал ответа, успел разобраться самостоятельно, сасибо за ответ.
С уважением, ньюб
 

Milord

Местный знаток
Дважды.
И у iMA семь параметров, не восемь.
Я начинаю себя чувствовать нянем в детсаду :nda:
благодарю!!!
ну что поделаешь, мы все няни друг другу...:D
просто видимо не выспался, не заметил, но и строчки брал с готовой совы, понадеялся что там нет ошибок)))
 

hoz

Активный участник
благодарю!!!
ну что поделаешь, мы все няни друг другу...:D
просто видимо не выспался, не заметил, но и строчки брал с готовой совы, понадеялся что там нет ошибок)))


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

Рыболов

Новичок форума
Всем добрый день. Интересует вопрос как сделать вызов собственного индикатора из советника для получения данных с индикатора.

Понимаю что его нужно гдето объявить и потом обращаться для получения данных, но где объявлять и как обращаться непонятно... толи справку плохо читал то ли там этого нет, объясните пожайлуста кто разбирается желательно с примерами кода.
 

expforex

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

Понимаю что его нужно гдето объявить и потом обращаться для получения данных, но где объявлять и как обращаться непонятно... толи справку плохо читал то ли там этого нет, объясните пожайлуста кто разбирается желательно с примерами кода.

Привет,

на примере вполне известного индикатора:
double ExampleCustom=iCustom(Symbol(),0,"Moving Averages",20,0,MODE_SMA,shift); // Пример вызова пользовательского индикатора
 
Верх