任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 869

 
Top2n:

对不起,同样的事情翻来覆去一百遍是很可惜的。

我像一只羊一样盯着大门已经快一个月了。我什么都不明白。

任务是计算出一个较小的移动平均线,移动平均线为13。

即以13为基础,计算出12的周期。

易于计算。Y(N)=1/N*(Y(N+1)*(N+1)-X[N]),其中Y(i)-MA(i)在零条上的值,X[j]-第j条上的价格值;只是这是计算上的废话,同时它不允许查看未来。
 

你好!请问哪位尊敬的大师愿意检查我的第一个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中翻译这个问题?

 
rapid_minus:

此外,BAY(以及Sell)仓位可以在不同的条件下开仓,根据开仓的条件(如BAY),会有不同的平仓条件。(如BAY),会有不同的结束条件。

我如何在MKL中翻译这个问题?

我们 在循环中选择顺序。如果它是一个买入,并且其他数据(符号、Magik等)符合它应该在 "自定义收盘条件 "下被关闭的标准,那么如果 "自定义收盘条件 "存在,我们将关闭它。
 
artmedia70:
我们在循环中选择顺序。如果它是一个买盘,而且所有其他数据(符号、魔术师等)都符合必须在 "适当的收盘条件 "下收盘的标准,那么如果有 "适当的收盘条件",我们就收盘。

对我来说,这有点模糊,但经过一些挖掘,我想我会明白。非常感谢你没有像苏联的一些同志那样,在知识的高峰上转身离开或说教。

我想出了如何以这种方式关闭它。

//-------开仓绑定平仓的订单示例(我的)(通过票据)-----------------------------------------------------

//打开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; // 从关闭位置 循环中退出

}


}

请给大家分析一下,对前一个帖子也要好好分析一下。对不起,我很固执,但你看--你是唯一一个回复的人......。谢谢你!

 
//-------Пример(мой) приказа на открытие позиции с привязкой закрытия (по тикету)----------------------------------------------------- 
                                                      
                                                      //Локальная переменная, открывающая ордер БАЙ(вместо строки 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;                                       // Выход из цикла закрытия позиции
        }

     }
它是如此的容易阅读。对不起。
 
rapid_minus:

对我来说,这有点模糊,但经过一些挖掘,我想我会明白。非常感谢你没有像苏联的一些同志那样,在知识的高峰上转身离开或说教。

我想到了这样的关闭方式。

...

请给予分析,也请对上一个帖子给予分析。抱歉坚持,但你看,你是唯一一个回答的人......谢谢你!

嗯,这有点朦胧,不是吗?

1.你必须确定条件发生的事实,以关闭订单。

2.在这个循环中,你审查所有未结头寸,当你找到所需的买入订单时,你就关闭它。

这是一个循环的例子。

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;// если тип ордера не тот - ищем дальше
         // здесь, если ордер выбран, то он соответствует нужным критериям,
         // вызов функции закрытия выбранного ордера по тикету
         }
      }   
   }

例如,要关闭当前符号(在专家顾问运行的图表上)的买入订单,且魔法数字为100500(例如),你应该像这样调用函数

ClosePositions(Symbol(),OP_BUY,100500);

你不必写数字100500,通常魔法数字已经在EA中设置为一个变量,例如int Magic = 100500; 那么你需要写Magic而不是100500。

我没有在循环中写任何东西,所选的位置应该被关闭,因为它应该根据票据调用函数来关闭订单。这通常是对一个完整的函数的调用,其返回代码是交易服务器的 处理。你可以写一个简单的命令来关闭选定的订单 OrderClose() 来检查。

 
rapid_minus:
这样读起来就容易多了。对不起。

也可以编辑一个旧的帖子,这样就不会产生重复的帖子;)

 
evillive:
仍然可以编辑一个旧的帖子以避免重复;)
试过了,但SRC不放了。
 
artmedia70:

有点儿雾蒙蒙的。

1) 确定关闭买入订单的条件已经发生的事实

2.在循环中,你审查所有未结头寸,当你找到所需的买入订单时,你就关闭它。

这是一个循环的例子。

例如,要关闭当前符号(在专家顾问运行的图表上)的买入订单,且魔法数字为100500(例如),你应该像这样调用函数

你不必写数字100500,通常魔法数字已经在EA中设置为一个变量,例如int Magic = 100500; 那么你需要写Magic而不是100500。

我没有在循环中写任何东西,所选的位置应该被关闭,因为它应该根据票据调用函数来关闭订单。这通常是对一个完整的函数的调用,其返回代码是交易服务器的处理。你可以写一个简单的命令来关闭选定的订单 OrderClose() 来检查。


谢谢你。但据我所知,魔力是在开单时自动分配的。这就是为什么我不能确定订单在哪些条件下被打开,因此我不知道关闭它的条件。
原因: