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

Ugar

Гуру форума
Приветствую, товарищи кодеры!
Я гуманитарий и попытки написать код вызывают у меня дикие СТРАДАНИЯ!

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

Например, у нас 3 ордера "бай" по ценам: 1.2345 , 1.2500 и 1.2200
Эта функция должна выбрать и закрыть ордер с ценой 1.2500 (как самый убыточный).

Кто нить подскажет как это сделать?
В цикле перебрать все ордера пропуская ненужные (с чужим маджиком или символом или не нудного типа). Сравнивать цены открытия и запоминать тикет с самой большой.
Выбрать найденный ордер с самой большой ценой.
Закрыть выбранный ордер.
Перед отправкой приказа закрыть, желательно проверить связь и наличие свободного торгового потока.
 

kudinoff

Почетный гражданин
Приветствую, товарищи кодеры!
Я гуманитарий и попытки написать код вызывают у меня дикие СТРАДАНИЯ!

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

Например, у нас 3 ордера "бай" по ценам: 1.2345 , 1.2500 и 1.2200
Эта функция должна выбрать и закрыть ордер с ценой 1.2500 (как самый убыточный).

Кто нить подскажет как это сделать?
Код:
void CloseFar(int type=EMPTY) // type - Задать тип ордера бай/селл
{
int ticket;
double dist;
double price;
int sign;
price=type==OP_BUY?Bid:Ask;
sign=type==OP_BUY?(-1):1;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==type)
{

if((price-OrderOpenPrice())*sign>dist) { dist = (price-OrderOpenPrice())*sign; ticket = OrderTycket(); }
}
}
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true) OrderClose(OrderTicket(),OrderLots(),price,Slippage,clrNONE);
}
 

vladradon

Программист
закрытия самого убыточного ордера в сетке
Самый убыточный ордер в сетке не обязательно самый первый (дальний) - все еще от лота ордера зависит. А если нужен именно по дальности открытия выбирать, то задаешь в цикле от 0 перебор ордеров и первый ордер, который пройдет отбор, будет нужным, т.к. его порядковый номер открытия будет наименьшим. Сразу ставим команду закрытия ордера и прерываем цикл - дальше нам искать нечего. Но это только в том случае, если сетка не выставляет выше и ниже ордера относительно предыдущих одновременно - тогда только цены открытия ордеров сравнивать. Набросал скрипт по-быстрому.
 

Вложения

  • CloseFirst.mq4
    1,3 КБ · Просмотры: 19
Последнее редактирование:

Rokfel

Интересующийся
Добрый вечер господа. Кто может подсказать как реализовать тралл сетки ордеров в валюте депозита?
 

vladradon

Программист
как реализовать тралл сетки ордеров в валюте депозита?
Набросал советника - тральщика профита. Его можно отдельно использовать или вытащить из него код.
 

Вложения

  • TralProfit.mq4
    3,9 КБ · Просмотры: 24

griz

Активный участник
Здравствуйте. Не могу вывести объект - Рисунок в чарте. Посмотрите в прикрепленном файле, что там исправить, чтобы Рисунок показался в чарте.

Рисунок (24-разрядный) находится по пути \MQL4\Images\Sell.bmp

При клике на чарт, должен выводиться рисунок в чарте.
 

Вложения

  • Kartinka_Patterns.mq4
    14,3 КБ · Просмотры: 18
Последнее редактирование:

Nickolay1234

Интересующийся
Здравствуйте.

Такой глюк... Тестирую одного! Эксперта на 3-х компьютерах. На 2-х работают по коду четко, а на одном постоянно какие то косяки с расчетами - в основном неправильно рассчитывает стоп лосы, или ложные срабатывания.

Железо не новое, но и не древнее.

Кто то сталкивался с таким?
 
Последнее редактирование модератором:

vladradon

Программист
Здравствуйте.

Такой глюк... Тестирую одного! Эксперта на 3-х компьютерах. На 2-х работают по коду четко, а на одном постоянно какие то косяки с расчетами - в основном неправильно рассчитывает стоп лосы, или ложные срабатывания.

Железо не новое, но и не древнее.

Кто то сталкивался с таким?
Если счета разные, то может на косячном счете стопуровень не нулевой и стопы попадают в запретную зону. Но лучше код смотреть, иначе можно долго гадать...
 
Последнее редактирование модератором:

Nickolay1234

Интересующийся
Код:
      int j1 = 10; for(int t=0;t<Digits()-1;t++){j1 = j1*10;}     //-- ДВА ВАРИАНТА СТОП ЛОСА - вычисляем стоплосс и тейкпрофит
      double stoploss_v1 = MathRound (MathAbs( iMA(symb,PERIOD_M15,13,0,MODE_EMA,PRICE_TYPICAL,0) - (iMA(symb,PERIOD_M15,13,0,MODE_EMA,PRICE_TYPICAL,0) + 2 * iATR(symb,PERIOD_M15,14,0) ) ) * j1 ) ;
      double stoploss_v2 = MathRound (MathAbs( iMA(symb,PERIOD_M15,13,0,MODE_EMA,PRICE_TYPICAL,0) - (iMA(symb,PERIOD_M15,13,0,MODE_EMA,PRICE_TYPICAL,0) + 2 * iStdDev(symb,PERIOD_M15,10,0,MODE_EMA,PRICE_TYPICAL,0) ) ) * j1 ) ;
      if(stoploss_v1<stoploss_v2){takeProfit=stoploss_v2;stopLoss=stoploss_v1;}
      if(stoploss_v1>stoploss_v2){takeProfit=stoploss_v1;stopLoss=stoploss_v2;}
 

Nickolay1234

Интересующийся
Если счета разные, то может на косячном счете стопуровень не нулевой и стопы попадают в запретную зону. Но лучше код смотреть, иначе можно долго гадать...
Счета демо разные, но параметры одинаковые... да и до стопов там далеко. Выше кусок кода расчета стоплосса...
Сначала грешил на первую строчку расчета поинта, но проверил - все нормально.
 

vladradon

Программист
Сначала грешил на первую строчку расчета поинта, но проверил - все нормально.
В индикаторах стоит расчет по symb, а Digits() берет с текущего символа.
а вот это может повлиять SymbolInfoInteger(NULL,SYMBOL_TRADE_STOPS_LEVEL)
Я выше уже писал об этом.
 

Rokfel

Интересующийся
Добрый Новый год Всем. Может кто подсказать как объединить сетку и пирамиду в ордерах? может есть у кого простенький понятный исходник, для изучения?
 
Верх