我正在学习写顾问... - 页 6

 
ALex2008 >> :

慢慢来,读一读这个主题吧!

我在那里写的是关于选择

即使经纪商给出了重新报价...


错误代码138和一个真实的账户。

 

如果你指的是这个选项,它指的是OrderModify

YuraZ писал(а) >>

допустим

получен сигнал -

на тике бъем на вход раз 5

не пробили! вышли

на втором тике после сигнала входим и долбим далше!

...那么我还没有长到虱子))))。如何计算他们的第1次打钩,第2次打钩?

Sleep(2000); //出错后要等待2秒。

而等待新的蜱虫的时间有多长?


 
Talex >> :
像这样试试吧。

我现在的任务是在OpenSend之后立即通过OrderModify设置一个止损,并检查这个止损是否存在。

如果没有成功,就不要再追踪了,如果没有,错误在哪里,试着把......把......再把......)

RefreshRates();   
           double SLS = Ask+ Stop*Point;   //стоп на продажу
           Modify = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
              if ( Modify == false)
                  {
                      Print("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());
                      for (int j=0 ;; j++) //пытаемся пока ДЦ не умрет)
                             {
                                SLS = SLS+ j*Point;   //увеличиваем стоп на 1 пп 
                                RefreshRates();
                                Modify = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
                                   if ( Modify==true)
                                       break;
                                   else   
                                       Print("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());        
                              }
                  }
 
你能告诉我如何检查OrderModify 的状态,以便在修改成功后,你不会再尝试修改而出现不必要的错误?
 
bool ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
if ( ModifyS==true) continue;

用这个来代替。

ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
if ( ModifyS==true) break;

这里。

1.为什么要不必要地定义变量类型 - 这是一个应该在编译过程中弹出的错误

2.不使用continue--过渡到一个新的迭代(即一个新的修改尝试),而使用break--从循环中退出(和无限,这不是好事)。

 
Xupypr >> :

1.为什么要不必要地定义变量的类型 - 这是一个应该在编译时弹出的错误

固定的)

2.不使用continue - 迭代跳到一个新的迭代(即一个新的修改尝试),而使用break - 退出循环

>> 谢谢你!

...而且没完没了,这可不是什么好事...

无限的,因为有必要阻止它......

如果我做了几次尝试,但由于某种原因被拒绝了,而且在这段时间里,价格与头寸相去甚远......那该怎么办呢?

 

日志中的错误。

open #1 sell 0.01 EURUSD ok
modify #1 sell 0.01 EURUSD ok
Error trying to set a stop for SEL, error code =0
stop loss#1
open #2 sell 0.01 EURUSD ok
modify #2 sell 0.01 EURUSD ok
Error trying to set a stop for SEL, error code =0
stop loss #2
open #3 sell 0.01 EURUSD ok
modify #3 sell 0.01 EURUSD ok
Error trying to set a stop for SEL, error code =0

输入卖出

RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        ModifySL();                   //ставим стоп
                        SLBU = OrderOpenPrice()- BU;               //цена БУ
                     }   
                  else Print("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());             
               }
         }




修改卖出





void ModifySL() 
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  RefreshRates();
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid- StopL*Point,OrderTakeProfit(),0,Red);
                  if (OrderStopLoss()==0) Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());

               }
                               
            else
                  RefreshRates();   
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ StopL*Point,OrderTakeProfit(),0,Red);
                  if (OrderStopLoss()== 0) Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());
               }
         } 
   }




 
ALex2008 >> :

如果你指的是这个选项,它指的是OrderModify

...那么我还没有长到虱子))))。如何计算他们的第1次打钩,第2次打钩?

Sleep(2000); //这是一个错误发生后的2秒等待。

那么要等多久才会有新的蜱虫呢?


滴水不漏

被称为

开始()

{

}

---

注意,如果你在START功能中呆了很久

你可能会漏掉一个或多个虱子

例如,你已经进入START功能,并在那里呆了10分钟,符合逻辑的是,虱子会出现,但你不会抓住它们。

尽管你可能在晚上相当长的时间内都不会有虱子出现

---

所以长时间坐在START功能区对捕捉蜱虫不利(如果它们对你很重要)。

用最少的周期和延迟来编写经济程序

---

 
YuraZ >> :

...请记住,如果你在START功能中呆了很长时间

你很可能漏掉一个或多个虱子

例如,你已经进入START功能,并在那里呆了10分钟,符合逻辑的是,虱子会出现,但你不会抓住它们。

尽管你可能在晚上相当长的时间内都不会有虱子出现

---

所以长时间坐在START功能区对捕捉蜱虫不利(如果它们对你很重要)。

用最少的周期和延迟来编写经济程序。

---

如果你在修改或设置订单之前使用RefreshRates()函数,它只是在Start()之外更新状态,即ticks?

我的理解是否正确?

 

这是最终版本的开幕式和修改后的姿势,供大家点评。

这个选项的 "+"和"-"?

开盘销售

RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        ModifySL();                   //ставим стоп
                        SLBU = OrderOpenPrice()- BU;               //цена БУ
                     }   
                  else Print("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());             
               }
         }




停止修改





void ModifySL()
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  RefreshRates();
                  bool Modify = OrderModify(OrderTicket(),OrderOpenPrice(),Bid- StopL*Point,OrderTakeProfit(),0,Red);
                  if ( Modify == false) Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());

               }
            else
               {
                  RefreshRates();   
                  Modify = OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ StopL*Point,OrderTakeProfit(),0,Red);
                  if ( Modify == false) Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());
               }
         }     
   }