Помогите пожалуйста исправить ошибки в этой функции. Уже все соки из меня выжала. Суть функции, при достижении определенного профита функция должна закрыть половину ордера.
void CloseHalfOrder(){
for (int i = 0; i<=OrdersTotal(); i++) { if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderProfit()>= NormalizeDouble (TP*Point,Digits)) { if (OrderType() == OP_BUY) double Lots = OrderLots(); double HalfLot = NormalizeDouble (Lots*0.5,2); OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);
Trader7777: Помогите пожалуйста исправить ошибки в этой функции. Уже все соки из меня выжала. Суть функции, при достижении определенного профита функция должна закрыть половину ордера. да, и еще, а как сделать, чтобы она срабатывала только один раз за один открытый ордер?
Принцип частичного закрытия ордеров можете посмотреть здесь.
Trader7777: Помогите пожалуйста исправить ошибки в этой функции. Уже все соки из меня выжала. Суть функции, при достижении определенного профита функция должна закрыть половину ордера.
void CloseHalfOrder(){
for (int i = 0; i<=OrdersTotal(); i++) { if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){//Нефига тут профиту делать, это так, для убыстрения....
if(OrderProfit()>= NormalizeDouble (TP*Point,Digits)) //А тут вообще непонятки что с чем сравниваете.... { if (OrderType() == OP_BUY) double Lots = OrderLots(); double HalfLot = NormalizeDouble (Lots*0.5,2);// Тут озаботится чтобы лот не стал меньше минимального OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);
еще раз.. Функция не работает. Хочу понять ошибки. + как сделать чтобы она срабатывала только 1 раз для 1 открытого ордера? Заранее огромное спасибо)
externint TP = 200; // это количество пунктов после которых должно произойти частичное закрытиеexternint Magic = 77;
void CloseHalfOrder(){
for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderProfit()>= NormalizeDouble (TP*Point,Digits))
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2); // изначально ( при открытии ордера) лот рассчитывается так, что он не может быть меньше чем 0,02OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);
if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}
}
еще раз.. Функция не работает. Хочу понять ошибки. + как сделать чтобы она срабатывала только 1 раз для 1 открытого ордера?
Не очень понятное условие один раз для ордера. Ну тут наверное глобальные переменные использовать придётся. Может быть несколько ордеров, и по каждому только один раз?
У меня следующая ситуация. В советнике несколько модулей, каждый модуль занимает несколько пользовательских функций. Для того, чтобы не утонуть в коде, принял решение каждый модуль вынести в скрипты. Вот здесь приглянувшийся вариант вызова скрипта с эксперта. Но здесь возникает следующая проблема: при вызове скрипта надо передать ему некоторые параметры. Можно глобальными переменными. Какие ещё варианты можно придумать?
Сразу говорю: вариант "попроще" через iCustom() меня не устраивает по двум причинам. Во-первых, вызов модуля должен быть эпизодическим в памяти, а не постоянным. Во-вторых, индикаторными массивами я не пользуюсь.
Не очень понятное условие один раз для ордера. Ну тут наверное глобальные переменные использовать придётся. Может быть несколько ордеров, и по каждому только один раз?
в рынке может быть только один ордер. На данный момент эта функция вообще не работает.. почему-то. Но если она будет нормально работать, я так понимаю, что она будет срабатывать постоянно, пока профит больше установленного кол-ва пунктов. Ясное дело надо, чтобы она только один раз закрыла половину позиции и все. Но для начала хоть бы она вообще заработала)
У меня следующая ситуация. В советнике несколько модулей, каждый модуль занимает несколько пользовательских функций. Для того, чтобы не утонуть в коде, принял решение каждый модуль вынести в скрипты. Вот здесь приглянувшийся вариант вызова скрипта с эксперта. Но здесь возникает следующая проблема: при вызове скрипта надо передать ему некоторые параметры. Можно глобальными переменными. Какие ещё варианты можно придумать?
Сразу говорю: вариант "попроще" через iCustom() меня не устраивает по двум причинам. Во-первых, вызов модуля должен быть эпизодическим в памяти, а не постоянным. Во-вторых, индикаторными массивами я не пользуюсь.
for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderProfit()>= NormalizeDouble (TP*Point,Digits))
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);
if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}
}
да, и еще, а как сделать, чтобы она срабатывала только один раз за один открытый ордер?
Помогите пожалуйста исправить ошибки в этой функции. Уже все соки из меня выжала. Суть функции, при достижении определенного профита функция должна закрыть половину ордера.
да, и еще, а как сделать, чтобы она срабатывала только один раз за один открытый ордер?
Помогите пожалуйста исправить ошибки в этой функции. Уже все соки из меня выжала. Суть функции, при достижении определенного профита функция должна закрыть половину ордера.
void CloseHalfOrder(){
for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){//Нефига тут профиту делать, это так, для убыстрения....
if(OrderProfit()>= NormalizeDouble (TP*Point,Digits)) //А тут вообще непонятки что с чем сравниваете....
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2);// Тут озаботится чтобы лот не стал меньше минимального
OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);
if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}
}
}
да, и еще, а как сделать, чтобы она срабатывала только один раз за один открытый ордер?
Принцип частичного закрытия ордеров можете посмотреть здесь.
Спасибо. Но я все же в первую очередь хочу понять свои ошибки. Учусь все-так.. Тем боле, мне кажется, я очень близок к истине.
еще раз.. Функция не работает. Хочу понять ошибки. + как сделать чтобы она срабатывала только 1 раз для 1 открытого ордера? Заранее огромное спасибо)
еще раз.. Функция не работает. Хочу понять ошибки. + как сделать чтобы она срабатывала только 1 раз для 1 открытого ордера?
Не очень понятное условие один раз для ордера. Ну тут наверное глобальные переменные использовать придётся. Может быть несколько ордеров, и по каждому только один раз?
еще раз.. Функция не работает. Хочу понять ошибки. + как сделать чтобы она срабатывала только 1 раз для 1 открытого ордера?
У меня следующая ситуация. В советнике несколько модулей, каждый модуль занимает несколько пользовательских функций. Для того, чтобы не утонуть в коде, принял решение каждый модуль вынести в скрипты. Вот здесь приглянувшийся вариант вызова скрипта с эксперта. Но здесь возникает следующая проблема: при вызове скрипта надо передать ему некоторые параметры. Можно глобальными переменными. Какие ещё варианты можно придумать?
Сразу говорю: вариант "попроще" через iCustom() меня не устраивает по двум причинам. Во-первых, вызов модуля должен быть эпизодическим в памяти, а не постоянным. Во-вторых, индикаторными массивами я не пользуюсь.
Не очень понятное условие один раз для ордера. Ну тут наверное глобальные переменные использовать придётся. Может быть несколько ордеров, и по каждому только один раз?
в рынке может быть только один ордер. На данный момент эта функция вообще не работает.. почему-то. Но если она будет нормально работать, я так понимаю, что она будет срабатывать постоянно, пока профит больше установленного кол-ва пунктов. Ясное дело надо, чтобы она только один раз закрыла половину позиции и все. Но для начала хоть бы она вообще заработала)
У меня следующая ситуация. В советнике несколько модулей, каждый модуль занимает несколько пользовательских функций. Для того, чтобы не утонуть в коде, принял решение каждый модуль вынести в скрипты. Вот здесь приглянувшийся вариант вызова скрипта с эксперта. Но здесь возникает следующая проблема: при вызове скрипта надо передать ему некоторые параметры. Можно глобальными переменными. Какие ещё варианты можно придумать?
Сразу говорю: вариант "попроще" через iCustom() меня не устраивает по двум причинам. Во-первых, вызов модуля должен быть эпизодическим в памяти, а не постоянным. Во-вторых, индикаторными массивами я не пользуюсь.
Библиотекой оформить как вариант.