datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)externint P=1; //Таймфреймexternint MagicNumber = 100500; // Установили магикint start()
{
int send;
double SL=200;
double TP=200;
double Lots=1;
for(int i = OrdersTotal(); i >=0; i--) // цикл для проверки ордеров
{
int af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES); // Шаг 1: OrderSelect Выбираем ордер (SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)if((OrderSymbol() == "EURUSD") && (OrderMagicNumber() == MagicNumber))return(0); // Шаг 2: Если символ EURUSD отсутствует,И если ордер присутствует , и ни один из ордеров НЕ содержит магикномер, то выходим из цикла.( выходим -значит откр. позицию)
(если какое-либо условие из двух указанных не совпадает, то выходим)
}
if ((Close[0]>High[1]))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}
if ((Close[0]<Low[1]))
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}
return(0);
}
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
[in] Номер подокна графика. 0 означает главное окно графика. Указанное подокно должно существовать, в противном случае функция возвращает false. Возвращает true при успешной постановке команды в очередь указанного графика, иначе false. Если объект был уже создан ранее, то производится попытка изменить его координаты. При вызове ObjectCreate...
Убрать из советника второй индикатор заменить другим,изменить условие открытие ордера .Условие сделки покупка: НМА линия вверх второй индикатор столбик гистограмы выше нуля (второй индикатор пересечение нуля точка входа) по закрытой свече если нма и второй индикатор не изменили показания совершается покупка для продаже наоборот.Изменить...
datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)externint P=1; //Таймфреймexternint MagicNumber = 100500; // Установили магикint start()
{
int send;
double SL=200;
double TP=200;
double Lots=1;
for(int i = OrdersTotal(); i >=0; i--) // цикл для проверки ордеров
{
bool af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES); // OrderSelect возвращает тип bool// Шаг 1: OrderSelect Выбираем ордер //(SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))return(0); // Шаг 2: Если символ Выбранного ордера
//равен EURUSD (заменено на текущий инструмент открытого окна) ,
// И если магик Выбранного ордера равен магик то выходим из функции Онстарт.// Если же наш ордер не будет выбран из ордеров терминала, то цикл закончится и начнется выставление ордеров.
}
if ((Close[0]>High[1])) // клоз и хай здесь для текущего окна и инструмента.
{
send=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber); // так же здесь цены аск и бид тоже для текущего инструмента
}
if ((Close[0]<Low[1]))
{
send=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber); // и поинт кстати тоже.
}
return(0);
}
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
//+------------------------------------------------------------------+//| forumtest.mq4 |//| Copyright 2019, MetaQuotes Software Corp. |//| https://qstr.ru |//+------------------------------------------------------------------+#property copyright"Copyright 2019, MetaQuotes Software Corp."#property link"https://qstr.ru"#property version"1.00"#property strictdatetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)externint P=1; //Таймфреймexternint MagicNumber = 100500; // Установили магик//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---int send;
double SL=200;
double TP=200;
double Lots=1;
for(int i = OrdersTotal(); i >=0; i--) // цикл для проверки ордеров
{
bool af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES); // OrderSelect возвращает тип bool // Шаг 1: OrderSelect Выбираем ордер //(SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))return; // Шаг 2: Если символ Выбранного ордера //равен EURUSD (заменено на текущий инструмент открытого окна) ,// И если магик Выбранного ордера равен магик то выходим из функции Онстарт.// Если же наш ордер не будет выбран из ордеров терминала, то цикл закончится и начнется выставление ордеров.
}
if ((Close[0]>High[1])) // клоз и хай здесь для текущего окна и инструмента.
{
send=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"My order",MagicNumber,0,clrGreen); // так же здесь цены аск и бид тоже для текущего инструмента
}
if ((Close[0]<Low[1]))
{
send=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,"My order",MagicNumber,0,clrGreen); // и поинт кстати тоже.
}
return;
}
//+------------------------------------------------------------------+
我的理解是,这就像定期检查可用性。(是否有EURUSD?以及是否有指定的Magic订单?)如果缺少任何一个条件,我们 就开仓。只有当这两个条件都满足时,我们才开仓。
然后,我们在步骤2中被问到。假设我们有一个手动打开的订单。那么我们就满足了第一个条件(我们有相同的符号),我们将不满足第二个条件,因为这个命令不包含魔法。如果其中一个条件不匹配,那么代码应该打开订单。这正是代码的作用。但在下一次打勾时,它打开了第三、第四和第五个订单.....。
为什么会开出第三个订单?
但有两个订单总共满足这两个条件。应该有一个检查(改成return(0)),而不是一个开口。,而不是开口。
大家晚安!你能告诉我是否能在mql5中写一段代码,在图表上画一条线(图片附后)并在文件中记录这条线的所有坐标?如果你想画一条线并将其填入坐标,那么你需要对该线进行简单的追踪。
一切都在文件 中。
一切都在文件 中。
谢谢你的提示,也许你可以帮我造一个,当然是免费的。
谢谢你的提示,但也许你可以帮我造一个这样的东西,当然不是免费的。
不是免费的--这是给 你的)))。
我的理解是,这就像定期检查可用性。(是否有EURUSD?以及是否有指定的Magic订单?)如果缺少任何一个条件,我们 就开仓。只有当这两个条件都满足时,我们才开仓。
然后,我们在步骤2中被问到。假设我们有一个手动打开的订单。那么我们就满足了第一个条件(我们有相同的符号),我们将不满足第二个条件,因为这个命令不包含魔法。如果其中一个条件不匹配,那么代码应该打开订单。这正是代码的作用。但在下一次打勾时,它打开了第三、第四和第五个订单.....。
为什么会开出第三个订单?
但有两个订单总共满足这两个条件。应该有一个检查(改成return(0)),而不是一个开口。但不包括开幕式。
== - 如果相等 != - 如果不相等。继续 - 循环迭代结束,开始一个新的循环迭代。断裂--循环终止,并过渡到循环后的下一个操作者,返回--函数终止,在你的例子中是Onstart,并等待新的tick。如果你的魔力的订单是开放的,它应该结束功能并离开以等待新的勾选。
问题,如果你想在当前窗口打开订单,为什么要明确指定工具,还是想从其他工具的窗口打开订单?也不清楚你想开多少个订单。根据你的代码,只能打开一个订单,只有在它关闭后,才会打开第二个订单。你有一个魔术师和一个开窗工具。另外,订单的开仓条件是针对当前工具而不是针对欧罗巴的。
== - 如果相等!= - 如果不相等。Kontinue - 终止循环迭代并开始一个新的循环迭代。Break - 终止循环并进入循环后的下一个运算符,return - 终止函数,在你的例子中是Onstart,并等待一个新的tick。如果你的魔力的订单是开放的,它应该结束功能并离开以等待新的勾选。
问题,如果你想在当前窗口打开订单,为什么要明确指定工具,还是想从其他工具的窗口打开订单?也不清楚你想开多少个订单。根据你的代码,只能打开一个订单,只有在它关闭后,才会打开第二个订单。你有一个魔术师和一个开窗工具。另外,订单的开仓条件是针对当前工具而不是针对欧罗巴的。
- 是的,我想在当前窗口打开。
- 一个订单。在前一个订单关闭之前,下一个订单不会被打开。
"另外,订单 开仓条件是针对当前工具而不是欧标进行检查。" - 那么?
- 是的,我想在当前窗口打开。
- 一个订单。在前一个订单关闭之前,下一个订单不会被打开。
"同时,订单 开仓条件是 针对当前工具而不是针对欧元区进行检查。" - 那么?
然后呢,例如,你打开的窗口不是Eurobucks,而是Eurofunt,你将选定的订单符号与Eurobucks进行比较,如果是真的,那么Eurobucks上有一个订单,如果我们的magik,那么从OnStart函数中返回,如果不是,那么我们在Eurobucks上设置一个订单,但是Kloz、High、Ask、Bid在打开订单时将是一个错误,因为这些实例的Bid和Ask是不同的。而Symbol()将返回当前窗口的符号,不会发生错误。
你可以从元编辑器中使用一个模板,在左上方有一个新按钮。OnStart函数仍然被使用,但这是不对的,OnStart是为脚本服务的。正确的模板。
正确的代码。你的订单注释缺失,魔术师也没有在你的代码中得到说明。
你的例子中存在许多错误
应该有。
这里的价格没有规范化OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"My order",MagicNumber,0,clrGreen)。
这里我不明白的是,如果条件是假的,为什么需要从OnTick()退出的逻辑。
也许,我们应该继续循环,只计算订单的数量。
你的例子在逻辑上非常简单,很难为其他任务修改它...也许他想加个尾巴