[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 207

 
solnce600:

先生们,请告诉我如何编码(可能在条件语句中)一个简单的想法

-如果一笔交易以止损点平仓

-在止损价开立另一笔交易

谢谢你

请看一看
 
Roger:

1.你不能在init()函数中打开订单。 (在策略测试器中,这仍然可以工作,但在演示中不能工作)。

2.当你关闭订单时,你应该从终点算到起点,而不是像你的情况那样反过来。

谢谢你的答复。
在这种情况下,循环运算符在测试器中被调查,这就是为什么订单在init()中被打开以进行简化,这在真实的EA中不会发生。
改变订单选择的顺序确实会导致它们在一个刻度内被关闭(我在下面给出了程序的代码和测试者日志的报告)。
似乎很奇怪,MQL4不允许我改变订单的工作顺序。 如果你知道原因,请告知,因为根据EA的工作逻辑,我将完全按照订单打开的顺序关闭订单。

真诚的。舒尔金。

Код программы.

//+------------------------------------------------------------------+
//|                                                     Poligon1.mq4 |
//|                                            21 февраля 2013 года. |
//|Тестирование оператора цикла for.                                 |
//+------------------------------------------------------------------+
#property copyright "21 февраля 2013 года."
#property link      ""
//+------------------------------------------------------------------+
//|Объявленные переменные                                            |
//+------------------------------------------------------------------+
int Mn=357;//Magic number
int i;//Показатель счётчика итераций
double PriTP;//TP серии
int Tick;//Счётчик тиков
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----Установка серии ордеров
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,NormalizeDouble(Bid-35*Point,Digits),
NormalizeDouble(Ask+35*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,1,Ask,0,NormalizeDouble(Bid-25*Point,Digits),
NormalizeDouble(Ask+25*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUYLIMIT,1,NormalizeDouble(Ask-15*Point,Digits),0,
NormalizeDouble(Bid-40*Point,Digits),NormalizeDouble(Ask+25*Point,Digits),
NULL,Mn,0,CLR_NONE);//OP_BUYLIMIT
OrderSend(Symbol(),OP_SELLSTOP,3,NormalizeDouble(Ask-30*Point,Digits),0,
NormalizeDouble(Bid+15*Point,Digits),NormalizeDouble(Ask-75*Point,Digits),
NULL,Mn,0,CLR_NONE);//OP_SELLSTOP
//----
   PriTP=Bid;//PriTP
   Print("Кс0:"," OrdersTotal=",OrdersTotal());//Сообщение
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   Tick++;//Tick
//   Print("Кс1:"," Tick=",Tick);//Сообщение
//----
//   for(i=0;i<OrdersTotal();i++)//Инициализация цикла
   for(i=OrdersTotal()-1; i>=0; i--)//
   {
   Print("Кс2:"," Tick=",Tick," i=",i);//Сообщение
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера i
    {
   if(OrderSymbol()==Symbol())//Символ
     {
   if(OrderMagicNumber()==Mn)//Идентификационное число
      {
   if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
       }//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      }//Закрыто if(OrderMagicNumber()==Mn)
     }//Закрыто if(OrderSymbol()==Symbol()
    }//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   }//Закрыто for(i=0;i<OrdersTotal();i++)
//----
   return(0);
  }
//+------------------------------------------------------------------+
Записи в журнале тестера.

2013.03.08 13:28:19     Poligon1 EURUSD,M15: removed
2013.03.08 10:14:14     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=3 i=0
2013.03.08 10:14:14     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=3 i=1
2013.03.08 10:13:50     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=2 i=0
2013.03.08 10:13:50     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=2 i=1
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 at price 1.3395
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=0
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 at price 1.3395
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=1
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=2
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=3
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=4
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=5
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс2: Tick=1 i=6
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: Кс0: OrdersTotal=7
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD at 1.3367 sl: 1.3410 tp: 1.3322 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.3382 sl: 1.3355 tp: 1.3422 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 ok
2013.03.08 10:13:26     2013.02.11 12:15  Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 ok
2013.03.08 10:13:26     Poligon1 test started
2013.03.08 10:13:24     Poligon1 EURUSD,M15: loaded successfully

 
非常感谢你提供的有价值的信息,我一定会在今后努力考虑你所告诉我的一切。
 
borilunad:

你不可能完全在止损价开仓,但你可以有条件地在相同或相反的方向开仓!

这里是Kim的 "有用的函数 "中的一个函数调用,你可以把它放在一个条件中。

isCloseLastPosByStop - 返回通过止损关闭最后一个位置的标志

如果(isCloseLastPosByStop() ==0)或...==1)和任何你想要的......

你可以在这里找到这个功能:https://www.mql5.com/ru/forum/131859

并把它放在起点之外!

我请求你!你可以自己做这一切,勤奋、准确和耐心,否则你不会从提示中学到任何东西!"。

只有通过自己的充分努力,才能获得知识!进入日常的探究性工作!好运!


非常感谢你提供的有价值的信息,我一定会在今后努力考虑你所告诉我的一切。
 

日子过得不错。

请告诉我,是否存在TC可以改变或删除订单的评论的情况?

非常感谢你。

 
Gek34:

请告诉我,是否存在TC可以改变或删除订单的评论的情况...?

作为一个例子。
本机评论
e121220_3in1 01

翻转后增加了DC

e121220_3in1 01[调换]

也就是说,如果我们搜索一个带有注释的订单,我们应该初步确定原生注释行的长度,在搜索过程中,我们只检查相应长度的变更后的注释的第一部分。或者检查本地字符串是否在被检查的注释中。

 

Shurkin:

谢谢你的答复。
在这种情况下,循环运算器的工作在测试器中被准确调查,这就是为什么订单在init()中被打开以进行简化,这在真实的EA中不会发生。
改变订单选择的顺序确实会导致在一个刻度内关闭订单(程序的代码和测试者日志的报告在下面给出)。
似乎很奇怪,MQL4不允许我选择订单。 如果你知道原因,请告知,因为专家顾问的工作逻辑表明,订单应该完全按照其打开的顺序关闭。

真诚的。舒尔金。



试试这个结构

 for(i=0, int k=0; i<OrdersTotal();i++,k++)//
   {
   Print("Кс2:"," Tick=",Tick," i=",i);//Сообщение
   if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера i
    {
   if(OrderSymbol()==Symbol())//Символ
     {
   if(OrderMagicNumber()==Mn)//Идентификационное число
      {
   if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
   k--;
       }//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      }//Закрыто if(OrderMagicNumber()==Mn)
     }//Закрыто if(OrderSymbol()==Symbol()
    }//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   }//Закрыто for(i=0;i<OrdersTotal();i++)
 
Gek34:

日子过得不错。

请告诉我,是否存在TC可以改变或删除订单的评论的情况?

非常感谢你。


我们经历了对一个订单的评论的完全改变。另外,在部分关闭期间,魔法有时会被清零(部分关闭是由服务器发起的)。现在,有一个单独的、循环的顾问来控制后者,它监测 "外来 "订单和其他不一致的情况,通过推送信息 及时通知。
 

请告知如何正确书写该条件。

1.如果订单符号=符号和订单Magik=135

2.如果没有未决的 BAYSTOP订单

3.如果没有未平仓的订单BAY或者(如果有)止损>开盘价

4.如果价格在MA和分形之间上升

下达悬而未决的买入止损单

像这样写。

 static bool flag ;

   if(NewBar()==true)

     flag = true; 

     for(int i=0;i<total-1;i++) 

         {

         OrderSelect(i,SELECT_BY_POS); 

          if(OrderSymbol()==Symbol() && OrderMagicNumber()==135) 

          { 

          if(OrderType()<=OP_BUYSTOP) 

           {

           if((OrderType()<=OP_BUY) || (OrderType()==OP_BUY && OrderStopLoss()>OrderOpenPrice()))  

            { 

            if(Ask<m && Ask>ma && frUP>0 && flag)

            {

              double price = NormalizeDouble(frUP+30*Point+(Ask-Bid)*Point,Digits);

             double stoploss = NormalizeDouble(price-sl*Point-30*Point,Digits);

             double takeprofit = NormalizeDouble(price+tp*Point,Digits);

             int ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,price,5,stoploss,takeprofit,"R",135,TimeCurrent()+55000,Blue);

             if(ticket>0)

               {

               Alert("R!Отложенный ордер BUYSTOP!!! ",Symbol());

               flag = false;

               }

               else

               {

               Print("Lots= ", Lots,"price= ", price,"stoploss= ", stoploss,"takeprofit= ", takeprofit,"Ошибка № ",GetLastError());      

               return;

               }

             }

           }

         }

       }

     } 

不工作!告诉我这是什么错误?

 

请告知什么会导致以下问题。

有一个使用外部功能 的指标。编译后的库代码位于 libraries 文件夹中,描述符--位于 include 中。

连接 #include <lib_Zemckikh.mqh>.在指标的第一次运行期间,所有库的功能都正常工作,指标在图表上显示。在改变参数后(在对指标进行新的计算后),库函数不被调用,指标不被显示,在改变参数后的 "专家 "标签中没有条目。

如果你排除了库的连接,将所需的函数放在指标文件中(直接用函数编译),一切都能正常工作。

我不明白哪里出了问题。我不想污染论坛,我不把代码附在上面。如果你需要,我可以亲自送去给你。