//-------Пример(мой) приказа на открытие позиции с привязкой закрытия (по тикету)-----------------------------------------------------
//Локальная переменная, открывающая ордер БАЙ(вместо строки 63)
int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point));
//-------Тогда закрытие именно для этого приказа может быть таким:-----------------------------------------------------
if (Ticket_1()==true) //Если был открыт ордер №1, то...
{ if (Yellow_0>Red_0 && (Yellow_0-Red_0)<(Yellow_1-Red_1)) //Желтая выше красной, сужение(условие)
{ if (MA_2 < MA_1 && MA_1 > MA_0);} //Верхний перелом Средней (условие)
else (Yellow_0>Red_0 && (Yellow_0-Red_0)>(Yellow_1-Red_1)) //Желтая выше красной, расширение(альтерн.условие)
{ if (MB_2 < MB_1 && MB_1 > MB_0);} //Верхний перелом Боллинджера (условие)
bool Ans=OrderClose(Ticket,Lot,Bid,0); //...закрытие ордера (лок.переменная)
Alert("Попытка закрыть ордер БАЙ лотом("Lots"),цена("Ask"). Ожидание ответа..");
if (Ans==true) // Получилось :)
{
Alert ("Закрыт ордер БАЙ лотом("Lots"),цена закрытия("Bid");
break; // Выход из цикла закрытия позиции
}
}
void ClosePositions(string symbol, int type, int magic) {
for(int i=OrdersTotal()-1; i>=0; i--) { // цикл по открытым ордерамif(OrderSelect(i,SELECT_BY_POS)) { // выбираем ордер по индексуif(OrderMagicNumber()!=magic) continue;// если магик не искомый - ищем дальшеif(OrderSymbol()!=symbol) continue;// если символ не тот - ищем дальшеif(OrderType()!=type) continue;// если тип ордера не тот - ищем дальше// здесь, если ордер выбран, то он соответствует нужным критериям,// вызов функции закрытия выбранного ордера по тикету
}
}
}
对不起,同样的事情翻来覆去一百遍是很可惜的。
我像一只羊一样盯着大门已经快一个月了。我什么都不明白。
任务是计算出一个较小的移动平均线,移动平均线为13。
即以13为基础,计算出12的周期。
你好!请问哪位尊敬的大师愿意检查我的第一个EA的启动情况?有可能继续前进吗?也许我错过了什么?如果有任何具体情况,我将非常感激。我在论坛上看到过如何只开一个仓位,但我没有复制,现在也找不到了。请给予帮助。
谢谢你!
// 专家顾问的试用版
//--------------------------------------------------------------------
//------Вводные данные:-----------------------------------------------------------
输入 double Lots = 0.1; //Lot
输入 int MovingPeriod =5; // МА计算周期
输入 int MovingShift =0; // MA shift
输入 int InpBandsPeriod=10; //布林线 周期
输入 int InpBandsShift=0; // 布林线位移
输入 double InpBandsDeviations=2.0; // 布林线偏差
输入 int K_Period=30; // 随机的%K周期。
输入 int D_Period=10; // %D 随机周期
输入 int Slowdawn =8; // 随机慢速。
输入颜色 clMainStoch =Yellow; // 主随机线的颜色。
输入颜色 clSignalStoch =Red; // 随机信号线的颜色。
// -----声明全局变量:------------------------------------------
double MA_0, MA_1, MA_2; // 0、1和2条的MA值
double MB_0, MB_1, MB_2; // 0、1和2条上的平均布林线值
double ExtUpperBuffer[]; // 布林线上轨的数值
double ExtLowerBuffer[]; // 布林线下轨的数值
double Delta_0, Delta_1; // 布林上下限值之差 ...
// ...0和1柱的布林线
double Yellow_0, Yellow_1, Yellow_2; // 在0、1和2条上的MAIN值
double Red_0, Red_1, Red_2; // 0、1和2条上的数值SIGNAL
//-------Поехали!----------------------------------------------------------------
int start() //Special function start
{
//MA指标的功能调用
MA_0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0)。
MA_1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1)。
MA_2=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2)。
//反馈给布林线函数
MB_0=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,0) 。
MB_1=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,1) 。
MB_2=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,2) 。
Delta_0=iBands(ExtUpperBuffer[0]-ExtLowerBuffer[0])。
Delta_1=iBands(ExtUpperBuffer[1]-ExtLowerBuffer[1])。
//Stochastic函数调用
Yellow_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,0) 。
Yellow_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,1) 。
Yellow_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,2) 。
Red_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,0) 。
Red_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,1) 。
Red_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,2) 。
//-------Ситуации по Стохастику:-----------------------------------------------------
//市场处于超买状态
double MOB()=(Yellow_0>=80 && Red_0>=80); //本地变量
//市场是超卖的。
double MOS()=(Yellow_0<=20 && Red_0<=20); //Local variable
//市场是正常的。
double MN()=(20<Yellow_0<80 && 20<Red_0<80); //本地变量
//危急情况
double MC1()=(20<Yellow_0<80 && Red_0<=20); //本地变量
double MC2()=(20<Yellow_0<80 && Red_0>=80); //本地变量
double MC3()=(20<Red_0<80 && Yellow_0<=20); //Local variable
double MC4()=(20<Red_0<80 && Yellow_0>=80); //Local variable
//-------Example(my)order to open position-----------------------------------------------------
如果(Delta_0 > Delta_1 && MOB()==true) //市场超买但Delta在扩大
{ 如果(MB_2 > MB_1 && MB_1 < MB_0) //Lower Bollinger Break
OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point);//打开买入订单
Alert("GetLastError()); //错误的信息
Alert("Open position BAY with lots("Lots"),price("Ask")."); //Buy message
此外,BAY(以及Sell)仓位可以在不同的条件下开仓,根据开仓的条件(如BAY),会有不同的平仓条件。(如BAY),会有不同的结束条件。
我如何在MKL中翻译这个问题?
此外,BAY(以及Sell)仓位可以在不同的条件下开仓,根据开仓的条件(如BAY),会有不同的平仓条件。(如BAY),会有不同的结束条件。
我如何在MKL中翻译这个问题?
我们在循环中选择顺序。如果它是一个买盘,而且所有其他数据(符号、魔术师等)都符合必须在 "适当的收盘条件 "下收盘的标准,那么如果有 "适当的收盘条件",我们就收盘。
对我来说,这有点模糊,但经过一些挖掘,我想我会明白。非常感谢你没有像苏联的一些同志那样,在知识的高峰上转身离开或说教。
我想出了如何以这种方式关闭它。
//-------开仓绑定平仓的订单示例(我的)(通过票据)-----------------------------------------------------
//打开BAY订单的本地变量(而不是第63行)。
int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point)
//-------,那么这个特定订单的关闭可以是这样的:-----------------------------------------------------
如果(Ticket_1()==true) //如果订单#1被打开,那么...
{ 如果(Yellow_0>Red_0 && (Yellow_0-Red_0)<(Yellow_1-Red_1)) //黄色高于红色,收缩(条件)
{ if (MA_2 < MA_1 && MA_1 > MA_0);}如果(MA_2 < MA_1 && MA_1 > MA_0);}//红色在中间那个上面(条件)。
else (Yellow_0>Red_0 && (Yellow_0-Red_0)>(Yellow_1-Red_1)) //黄色高于红色,扩展(条件)
{ 如果(MB_2 < MB_1 && MB_1 > MB_0);}//布林线上端断裂(条件)。
bool Ans=OrderClose(Ticket,Lot,Bid,0); //...关闭订单(锁定)变量)
Alert("Attempting to close order with Bid("Lots"),price("Ask").等待回复...")。
如果(Ans==true) // 成功了 :)
{
Alert ("Closed BAY order by lot("Lots"),Closing price("Bid");
break; // 从关闭位置 循环中退出
}
}
请给大家分析一下,对前一个帖子也要好好分析一下。对不起,我很固执,但你看--你是唯一一个回复的人......。谢谢你!
对我来说,这有点模糊,但经过一些挖掘,我想我会明白。非常感谢你没有像苏联的一些同志那样,在知识的高峰上转身离开或说教。
我想到了这样的关闭方式。
...请给予分析,也请对上一个帖子给予分析。抱歉坚持,但你看,你是唯一一个回答的人......谢谢你!
嗯,这有点朦胧,不是吗?
1.你必须确定条件发生的事实,以关闭订单。
2.在这个循环中,你审查所有未结头寸,当你找到所需的买入订单时,你就关闭它。
这是一个循环的例子。
例如,要关闭当前符号(在专家顾问运行的图表上)的买入订单,且魔法数字为100500(例如),你应该像这样调用函数
你不必写数字100500,通常魔法数字已经在EA中设置为一个变量,例如int Magic = 100500; 那么你需要写Magic而不是100500。
我没有在循环中写任何东西,所选的位置应该被关闭,因为它应该根据票据调用函数来关闭订单。这通常是对一个完整的函数的调用,其返回代码是交易服务器的 处理。你可以写一个简单的命令来关闭选定的订单 OrderClose() 来检查。
这样读起来就容易多了。对不起。
也可以编辑一个旧的帖子,这样就不会产生重复的帖子;)
仍然可以编辑一个旧的帖子以避免重复;)
有点儿雾蒙蒙的。
1) 确定关闭买入订单的条件已经发生的事实
2.在循环中,你审查所有未结头寸,当你找到所需的买入订单时,你就关闭它。
这是一个循环的例子。
例如,要关闭当前符号(在专家顾问运行的图表上)的买入订单,且魔法数字为100500(例如),你应该像这样调用函数
你不必写数字100500,通常魔法数字已经在EA中设置为一个变量,例如int Magic = 100500; 那么你需要写Magic而不是100500。
我没有在循环中写任何东西,所选的位置应该被关闭,因为它应该根据票据调用函数来关闭订单。这通常是对一个完整的函数的调用,其返回代码是交易服务器的处理。你可以写一个简单的命令来关闭选定的订单 OrderClose() 来检查。