Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть ли возможность добавить опции для выбора?
Например,
Отдельно, покупка и продажа отдельно
Модификация: BE все купить 0, или +1, или +2 пипса или продать все BE 0, 1 или 2 пипса?
Возможно ли это?
be.mq4
Здравствуйте, Младен,
Может ли кто-нибудь, пожалуйста, сказать мне, что я делаю неправильно, я в основном пишу свою ea, используя FX Gen с фрагментами и кодами, используя примеры из mq4 compiler и онлайн-форумов.Я пытаюсь закодировать свою стратегию для более легкой торговли, я смог выбрать последний ордер успешно, используя этот код.
void OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // Ни один ордер не открыт.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& Ask - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder();
}
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
return(lastTicket);
}
else
Print("Ошибка OrderSelect() - ", ErrorDescription(GetLastError()));
}
Не могли бы вы взглянуть на этот код. Я пытаюсь удалить самый старый ордер сначала, используя время даты и билет ордера, например, если открытый ордер >2, удалите самый старый ордер.
//-------------------------------------------------------------
// Etasoft Inc. Forex EA и Script Generator версия 4.1 EA
//-------------------------------------------------------------
// Ключевые слова: MT4, Forex EA builder, создать советника, разработчик советников
#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"
#property link
#include
#include
// экспортируемые переменные
extern int OrderId = 1;
extern int Slippage = 2;
extern double Lots = 0.01;
extern int MaxOrdersAllowed = 2; // разрешены оп покупки и оп продажи
extern int Grid = 10; // общее расстояние в пунктах до открытых ордеров
extern string EAComment = "564 testing";
// локальные переменные
double PipValue = 1; // эта переменная здесь для поддержки 5-значных брокеров
bool Terminated = false;
string LF = "\n"; // используйте это в пользовательских или утилитарных блоках, где вам нужны переводы строк
int NDigits = 4; // используется в основном для NormalizeDouble в блоках типа Flex
int ObjCount = 0; // подсчет всех объектов, созданных на графике, позволяет создавать объекты с уникальными именами
int current = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // очистить график
Comment(""); // очистить график
}
// начало работы эксперта
int start()
{
if (Bars < 10)
{
Комментарий("Недостаточно баров");
return (0);
}
if (Terminated == true)
{
Комментарий("Советник прекратил работу.");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
IfOrderDoesNotExist2();
IfOrderDoesNotExist4();
MaximumOrder();
}
void IfOrderDoesNotExist2()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
exists = true;
}
}
else
{
Print("Ошибка OrderSelect() - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
BuyPendingOrder();
}
}
void IfOrderDoesNotExist4()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
exists = true;
}
}
else
{
Print("Ошибка OrderSelect() - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
SellPendingOrder();
}
}
void BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;
double SL = price - 0*PipValue*Point;
если (0 == 0) SL = 0;
double TP = price + 0*PipValue*Point;
если (0 == 0) TP = 0;
если (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);
if (ticket == -1)
{
Print("Ошибка OrderSend() - ", ErrorDescription(GetLastError()));
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;
double SL = price + 0*PipValue*Point;
если (0 == 0) SL = 0;
double TP = price - 0*PipValue*Point;
если (0 == 0) TP = 0;
если (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);
if (ticket == -1)
{
Print("Ошибка OrderSend() - ", ErrorDescription(GetLastError()));
}
}
void MaximumOrder()
{
if (MaxOrdersAllowed> 0)
{
OrderCount();
}
}
void OrderCount()
{
int count = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
if (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
count++;
}
}
else
{
Print("Ошибка OrderSend() - ", ErrorDescription(GetLastError()));
}
if (count > MaxOrdersAllowed )
{
DeleteOldestOrder();
}
}
void DeleteOldestOrder()
{
datetime lastTime = 0;
int lastTicket = -1; // Ни одного открытого.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}
}
}
return(lastTicket);
}
else
Print("Ошибка OrderSelect() - ", ErrorDescription(GetLastError()));
}
int deinit()
{
if (false) ObjectsDeleteAll();
}
Здравствуйте Младен ,
Кто-нибудь может подсказать мне, что я делаю не так, я в основном пишу свою ea, используя FX Gen с фрагментами и кодами, используя примеры из mq4 compiler и онлайн-форумов. Я пытаюсь закодировать свою стратегию для более легкой торговли, я смог успешно выбрать последний ордер, используя этот код.
void OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // Ни один ордер не открыт.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& Ask - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder();
}
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
return(lastTicket);
}
else
Print("Ошибка OrderSelect() - ", ErrorDescription(GetLastError()));
}
Не могли бы вы взглянуть на этот код. Я пытаюсь удалить самый старый заказ сначала, используя время даты и билет заказа, например, если открытый заказ >2, удалить самый старый заказ.
//-------------------------------------------------------------
// Etasoft Inc. Forex EA и Script Generator версия 4.1 EA
//-------------------------------------------------------------
// Ключевые слова: MT4, Forex EA builder, создать советника, разработчик советников
#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"
#property link
#include
#include
// экспортируемые переменные
extern int OrderId = 1;
extern int Slippage = 2;
extern double Lots = 0.01;
extern int MaxOrdersAllowed = 2; // разрешены оп покупки и оп продажи
extern int Grid = 10; // общее расстояние в пунктах до открытых ордеров
extern string EAComment = "564 testing";
// локальные переменные
double PipValue = 1; // эта переменная здесь для поддержки 5-значных брокеров
bool Terminated = false;
string LF = "\n"; // используйте это в пользовательских или утилитарных блоках, где вам нужны переводы строк
int NDigits = 4; // используется в основном для NormalizeDouble в блоках типа Flex
int ObjCount = 0; // подсчет всех объектов, созданных на графике, позволяет создавать объекты с уникальными именами
int current = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // очистить график
Comment(""); // очистить график
}
// начало работы эксперта
int start()
{
if (Bars < 10)
{
Комментарий("Недостаточно баров");
return (0);
}
if (Terminated == true)
{
Комментарий("Советник прекратил работу.");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
IfOrderDoesNotExist2();
IfOrderDoesNotExist4();
MaximumOrder();
}
void IfOrderDoesNotExist2()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
exists = true;
}
}
else
{
Print("Ошибка OrderSelect() - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
BuyPendingOrder();
}
}
void IfOrderDoesNotExist4()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
exists = true;
}
}
else
{
Print("Ошибка OrderSelect() - ", ErrorDescription(GetLastError()));
}
if (exists == false)
{
SellPendingOrder();
}
}
void BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;
double SL = price - 0*PipValue*Point;
если (0 == 0) SL = 0;
double TP = price + 0*PipValue*Point;
если (0 == 0) TP = 0;
если (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);
if (ticket == -1)
{
Print("Ошибка OrderSend() - ", ErrorDescription(GetLastError()));
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;
double SL = price + 0*PipValue*Point;
если (0 == 0) SL = 0;
double TP = price - 0*PipValue*Point;
если (0 == 0) TP = 0;
если (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);
if (ticket == -1)
{
Print("Ошибка OrderSend() - ", ErrorDescription(GetLastError()));
}
}
void MaximumOrder()
{
if (MaxOrdersAllowed> 0)
{
OrderCount();
}
}
void OrderCount()
{
int count = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
if (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
count++;
}
}
else
{
Print("Ошибка OrderSend() - ", ErrorDescription(GetLastError()));
}
if (count > MaxOrdersAllowed )
{
DeleteOldestOrder();
}
}
void DeleteOldestOrder()
{
datetime lastTime = 0;
int lastTicket = -1; // Ни одного открытого.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}
}
}
return(lastTicket);
}
else
Print("Ошибка OrderSelect() - ", ErrorDescription(GetLastError()));
}
int deinit()
{
if (false) ObjectsDeleteAll();
}
Попробуйте использовать функцию, подобную этой:
{
datetime lastTime = Time[0]+Period()*60;
int lastTicket = -1; // None open.
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime)
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
}
}
if (lastTicket>-1)
if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES))
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}Спасибо Младен
все работает безупречно, кстати, прошу прощения за то, что разместил такой длинный кусок кода на форуме. Я все еще привыкаю к интерфейсу. Спасибо.
Индикатор не обновляется автоматически.
У меня есть индикатор, который очень хорошо подходит для моей торговли.
К сожалению, он не обновляется сам по себе. Я должен всегда вручную обновлять его.
Есть ли способ решить эту проблему?
Было бы очень полезно!!!
Заранее спасибо.
P.S.: Прикрепляю все, что у меня есть.
Он хочет получать смс уведомления. Как выглядит код?
Он хочет получить смс уведомление. Как выглядит код?
папаж30
Сделайте вот так :
SendNotification("сообщение-уведомление, которое вы хотите отправить");
А куда вы вставляете свой номер телефона? Мой номер 0039 555-23-45. Куда вводить ?
Пример:
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}А куда вы вставляете свой номер телефона? Мой номер 0039 555-23-45. Куда вводить ?
Пример:
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}Вот хорошее объяснение, как вы можете это сделать :
Индикатор не обновляется автоматически.
Здесь у меня есть индикатор, который очень хорошо подходит для моей торговли.
К сожалению, он не обновляется сам по себе. Я должен всегда вручную обновлять его.
Есть ли способ решить эту проблему?
Было бы очень полезно!!!
Заранее спасибо.
P.S.: Прикрепляю все, что у меня есть.Джим
Вместо того чтобы переписывать все заново, добавьте ограничение на расчет баров, а затем все эти бары пересчитываются. Это должно решить проблему обновления (просто держите BarsTocalculate на каком-то разумном - не слишком большом и не слишком маленьком значении. Я использовал 1000 по умолчанию, и, кажется, все в порядке). Попробуйте