Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо, ребята, оба предложения, вероятно, лучше, чем то, над чем я работал.
Кто-нибудь, пожалуйста, помогите мне....
Привет...
Я надеюсь, что кто-нибудь здесь может помочь мне, как закодировать это.Это советник martiangle и что я хочу сделать это:
1 . Когда открывается пост 2-го слоя, я хочу, чтобы целевая точка 1-го слоя переместилась в целевую точку 2-го слоя.Таким образом, когда целевая точка попадает во 2-й слой, эти 2 поста могут закрыться одновременно.Если 3-й слой открыт, целевая точка 1-го и 2-го слоя может переместиться в цену 3-й целевой точки.Таким образом, мы можем закрыться одновременно.То же самое происходит, если 4-й слой, 5-й слой и другие слои открыты.Просто нужно переместить все целевые точки в целевую точку текущего слоя или пост.
2.Нужна блокировка пунктов.Когда открывается 1-й слой, и получена прибыль, например, 15 пунктов (TP 32), ea делает блокировку по цене sl (например, 5 пунктов), поэтому, когда цена развернется на 10 пунктов, пост может автоматически закрыться с прибылью 5 пунктов.Только для поста 1-го слоя.2-й слой не нужно активировать, потому что это мартиангл советник.
Я очень извиняюсь за мой плохой английский. Надеюсь, кто-нибудь сможет помочь мне с кодом для этого советника. Спасибо
martiangle_rsi_.mq4
С уважением,
Очень нужна помощь
Помогите с комментарием пожалуйста
Я пытаюсь установить комментарий для отображения на экране, но не очень удачно.
Мне удалось получить количество пунктов для одной пары, но я не могу показать общее количество пунктов для нескольких пар.
Любая помощь была бы очень кстати
вот пример этого кода
//========== ФУНКЦИЯ getPipValue
double getPipValue(double ord,int dir)
{
double val;
RefreshRates();
if(dir == 1) val=(NormalizeDouble(ord,Digits) -
NormalizeDouble(Ask,Digits));
else val=(NormalizeDouble(Bid,Digits) - NormalizeDouble(ord,Digits));
val = val/Point*co;
return(val);
}
//== конец функции
int getSpread()
{
int spread=MarketInfo(Symbol(),MODE_SPREAD);
return(spread);
}
//========== ФУНКЦИЯ getOpenOrders
void getOpenOrders()
{
int nsl, nsd;
string mngMagic, trailon;
int totalorders = OrdersTotal();
for(int j=0; j<totalorders;j++)
{
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
if((OrderType() == OP_BUY || OrderType() == OP_SELL) &&
OrderSymbol() == Symbol()&&(MagicNumber==0 || MagicNumber ==
OrderMagicNumber()))
{
double val=getPipValue(OrderOpenPrice(),OrderType());
//int val = OrderProfit()/(OrderLots()*10);
}
if(MagicNumber == 0)
mngMagic = "Все "+Symbol()+" сделки.";
else
mngMagic = "Сделки с магическим числом = "+MagicNumber";
//RefreshRates();
Comment("Balance: ",AccountBalance(),", Account Equity: ",AccountEquity(),", Account Profit: ",AccountProfit(), "Ордер открыт: ",OrderOpenPrice(),
"\nPip Count: ", val,
"\nMy Account Cutoff Limit: ",Open_Loss_To_CloseTrades,
"\nУправление: ", mngMagic);
Спасибо
Значение пункта текущего ордера можно получить следующим образом:
Если вы хотите использовать "bid" и "ask", вам также необходимо использовать те, которые относятся к символу ордера, т.е. MarketInfo( OrderSymbol(), MODE_BID ) и MarketInfo( OrderSymbol(), MODE_ASK ).
ralph.ronnquist
Добрый день
Спасибо за код, я использовал его, но он считает только для одной пары, а не для всех пар.
Я экспериментировал с различными сценариями, но все еще не работает.
У меня есть ea, которая открывает 3 позиции, которые я запускаю на 5 парах. Я могу видеть количество пунктов для каждой пары, но не для всех.
ralph.ronnquist
Добрый день
Спасибо за код, я использовал его, но он считает только для одной пары, а не для всех пар.
Я экспериментировал с различными сценариями, но все еще не работает.
У меня есть ea, которая открывает 3 позиции, которые я запускаю на 5 парах. Я могу видеть количество пунктов для каждой пары, но не для всех.Ну, если вы знакомы с глобальными переменными, вы можете использовать их для хранения информации о пипсах по каждой паре, на которую ссылается каждый символ. Создайте другую глобальную переменную, которая ссылается на общее значение пипсов и вызовите эту конкретную глобальную переменную, получите ее обновление по мере увеличения пипсов, сохраните ее. Глобальные переменные могут быть доступны каждой ea, так как они хранятся в памяти MT4.
Если хотите, я могу помочь вам написать код.
Гиддай Шах-Джаб
Я видел глобальные переменные в коде раньше, но у меня не было опыта работы с ними, так что да, я хотел бы принять вашу помощь, чтобы закодировать это, так как это сводит меня с ума.
Gidday ShahJB Я видел глобальные переменные в коде раньше, но у меня был нулевой опыт работы с ними, так что да, я хотел бы принять вашу помощь, чтобы закодировать это, так как это сводит меня с ума.
Я только что быстро закодировал следующее. Почему бы вам не добавить этот код первым. Попробуйте и напишите мне, если не получится. Мне нужно немного поспать.
string val_old_string = "val_old" + Symbol();
int val_old = GlobalVariableGet(val_old_string);
if(val != val_old)
{
int pips_increment_decrement;
int current_total_pips;
string counter = "Счетчик пипсов";
double pips_counter = GlobalVariableGet(counter);
if (val>val_old)
{
pips_increment_decrement = val - val_old;
current_total_pips = pips_increment_decrement + pips_counter;
GlobalVariableSet(counter, current_total_pips);
GlobalVariableSet(val_old_string, val);
}
else
{
pips_increment_decrement = val_old - val;
current_total_pips = pips_counter - pips_increment_decrement;
GlobalVariableSet(counter, current_total_pips);
GlobalVariableSet(val_old_string, val);
}
}
Почему это не работает???
Здравствуйте,
Я полный новичок в программировании. Благодаря сообщениям и обучающим ресурсам на этом сайте я набрался смелости и попытался создать несколько советников, один из которых будет использовать Lguerre как один из триггеров (я использовал этот сайт, чтобы помочь мне в этом; Expert Advisor Builder for MetaTrader 4 ). Проблема моего советника в том, что он не открывает ордера на покупку при срабатывании триггеров. Я создал пару советников, используя вышеупомянутый сайт, и они прекрасно исполняют ордера для длинных и коротких позиций (советники использовали RSI). Пожалуйста, посмотрите на прилагаемый советник, 3-28, и дайте мне знать, что я делаю неправильно.... я использую неправильный формат для уровней, которые должны быть достигнуты перед исполнением сделки? Нужны ли дополнительные параметры для Laguerre?
Я потратил на это постыдное количество времени, и я на грани того, чтобы сдаться.... Любая помощь будет очень признательна!!!!!.
Кажется, я нашел ответ... зачем мне нужно умножать Laguerre в моем советнике, хотя?????
Я столкнулся с проблемой закрытия позиций. Помогите, пожалуйста
Я столкнулся с проблемой, которую не знаю как решить. Моя программа имеет несколько открытых ордеров и закрывает их все вместе, но иногда я думаю, что некоторые ордера не заполнены, поэтому она продолжает ждать, пока они не будут заполнены, и это блокирует мою программу. Что вы, ребята, нашли лучший способ закрыть все открытые ордера? Спасибо за помощь.
Вот код:
int OrdersTotalLong()
{
int order_total = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY)
order_total++;
}
return(order_total);
}
int MaxLongOrder()
{
int order = 0;
double lotbuyed = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
if ((OrderType() == OP_BUY) && (OrderLots() > lotsbuyed))
{
lotsbuyed = OrderLots();
order = i;
}
}
return(order);
}
int CloseLong()
{
while (OrdersTotalLong() > 0) //пока не останется ни одного открытого ордера (закрываем все)
{
if (OrderSelect(MaxLongOrder(), SELECT_BY_POS, MODE_TRADES) == false) continue;
OrderClose(OrderTicket(),OrderLots(), Bid, 3, Green);
}
}
return(0);
}