#property copyright"Влад Сергеев для mmgp"#property version"1.00"#property strict#property script_show_inputsinputint orders = 4; //всего ордеров в серии inputbool buy = true; //флаг разрешающий/запрещающий покупки inputbool sell = false; //флаг разрешающий/запрещающий продажи inputint magic = 100500; //уникальный номер для ордеров, открываемых этим скриптом inputdouble lot = 0.01; //объем каждого ордера серии inputint tp = 100; //тейк профит, в пунктах inputint sl = 100; //стоп лосс, в пунктах inputint slip = 2; //допустимое проскальзывание на открытии, в пунктах (для ECN, где открытие по рынку - игнор) //+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnStart()
{
int i=0; // для чего эта переменная
int ticket=0;
if(buy)
{
while(i<orders) // здесь эта переменная используется чтобы сравнивать ордера или для чего
{
RefreshRates(); // если убрать эту функцию коду хуже не становится
ticket=OrderSend(Symbol(),OP_BUY,lot,NormalizeDouble(Ask,Digits),slip,0,0,"",magic,0,clrBlue); //здесь понятно
if(ticket!=-1) // эта строчка тоже не понятна
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) // функция для выбора ордера это логично но тоже не понятно как ей пользоваться
{
OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl*Point,Digits),NormalizeDouble(OrderOpenPrice()+tp*Point,Digits),0,clrBlue);
// эту строчку тоже хотел бы чтобы объяснили
}
}
i++; // что увеличивается на оду единицу это относится к магическому номеру ордера чтобы программа понимала что у неё есть ордера
}
}
i=0;
if(sell) // прошлая запись была для покупак эта для продаж
{
while(i<orders)
{
RefreshRates();
ticket=OrderSend(Symbol(),OP_SELL,lot,NormalizeDouble(Bid,Digits),slip,0,0,"",magic,0,clrRed);
if(ticket!=-1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl*Point,Digits),NormalizeDouble(OrderOpenPrice()-tp*Point,Digits),0,clrRed);
}
}
i++;
}
}
}
//+------------------------------------------------------------------+
卖出订单以卖出价收盘
我有点糊涂了!指向代码中的错误所在!!!(日志上写着ORDER CLOSE ERROR 4108) 提前感谢!
鉴赏家们下午好!你是否已经用尽了一年中最艰难的一天?我们可以谈正事了吗?;=).
我画了一个EA,一切都很好,但据我所知,MQL在MT4环境下工作。我希望它能与直接与交易所合作的软件一起工作。是否有其他的MQL编译器?如果不是,我应该用什么语言来重写MQL?
你有一个休息时间,你需要继续。
我没有休息。是什么原因导致EA可能无法 "看到 "其订单?我有不同的服务器 和电脑时间,也许是因为这个原因?
每个人的时间是不同的。从远处开始,不要急于求成。1.看看OrdersTotal函数 给你提供了什么。它的值取决于历史设置:今天,过去3天,上周,......根据你的喜好调整。 2.然后创建一个周期,输出所有带有警报 的订单。这就是所谓的调试--它是程序员工作的一个非常重要的部分。比写代码更重要。
每个人的时间是不同的。从远处开始,不要急于求成。1.检查OrdersTotal函数 给你的信息。它的值取决于历史设置:今天,过去3天,上周,......按你的要求调整。 2.然后创建一个周期,用Alert输出所有订单。这就是所谓的调试--它是程序员工作的一个非常重要的部分。比写代码更重要。
谢谢你!
你们能告诉我如何在专家顾问的代码中写出一次开立3笔交易并能设置SL的功能吗?
以下是我的情况
有人建议我使用(OrdersTotal()) 函数,但它并不适合我的情况。我是这样安排的
它编译得很好,没有错误,但它不适合我的情况。
我发现以下代码
也许可以使用,但我不明白字符串的含义。在改写成适合我的条件时,可以使用这个代码吗?
你们能告诉我如何在专家顾问的代码中写上一次开3笔交易,并能设置SL吗?
以下是我的情况
有人建议我使用(OrdersTotal())函数,但它并不适合我的情况。我是这样安排的
它编译得很好,没有错误,但它不适合我的情况。
我发现以下代码
也许可以使用,但我不明白字符串的含义。如果我重写这段代码以适应我的条件,我可以使用它吗?
试试这个方法
pos=0; //顺序计数器
for(int i=OrdersTotal()-1;i>=0;i--) //读取市场订单
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))继续;//从市场订单中选择。
{
如果(OrderSymbol()!=Symbol()&&OrderMagicNumber()!=Magic)继续;//只选择EA订单(如果有Magic并且它在任何货币对上交易)。
pos++; //如果选择了,就增加一个位置。
}
}
你们能告诉我如何在EA的代码中写出一次开3笔交易并能设置SL的功能吗?