[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 205

 

下午好。问题如下。在 S.K .的MQL4书中 ,在"交易操作"部分,有一个简单脚本例子,修改一个申报价格高于其他挂单挂单(modifyorderprice.mq4),如下

//--------------------------------------------------------------------
// modifyorderprice.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                                     // Спец.функция start
  {
   int Tral=10;                                 // Дист. приближения
   string Symb=Symbol();                        // Финанс. инструмент
   double Dist=1000000.0;                       // Предустановка
   double Win_Price=WindowPriceOnDropped();     // Здесь брошен скрипт
//--------------------------------------------------------------- 2 --
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         //------------------------------------------------------ 3 --
         if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.
         if (OrderType()<2) continue;           // Рыночный ордер  
         //------------------------------------------------------ 4 --
         if(NormalizeDouble(MathAbs(OrderOpenPrice()-Win_Price),Digits)
            < NormalizeDouble(Dist,Digits))     // Выбираем ближайший
           {
            Dist=MathAbs(OrderOpenPrice()-Win_Price);// Новое значение
            int    Tip   =OrderType();          // Тип выбранного орд.
            int    Ticket=OrderTicket();        // Номер выбранн. орд.
            double Price =OrderOpenPrice();     // Цена выбранн. орд.
            double SL    =OrderStopLoss();      // SL выбранного орд.
            double TP    =OrderTakeProfit();    // TP выбранного орд.
           }                                    // Конец if
        }                                       // Конец анализа ордера
     }                                          // Конец перебора орд.
//--------------------------------------------------------------- 5 --
   if (Tip==0)                                  // Если отложенных нет
     {
      Alert("По ",Symb," отложенных ордеров нет");
      return;                                   // Выход из программы
     }
//--------------------------------------------------------------- 6 --
   while(true)                                  // Цикл закрытия орд.
     {
或者在这个脚本的第5-6块中有一个错误,因为(在我看来)这一行
if (Tip==0)                                  // Если отложенных нет
应该是这样的
if (Tip<2)                                  // Если отложенных нет
因为所有类型的非挂单(市场)订单都有类型0或1,即小于2

还是我误解了什么。

问题:请你澄清一下:如果我有什么误解,是什么?

提前感谢您的回答

 
7777877:

下午好。我有以下问题。在 S.K.的 MQL4书中, "交易操作 "部分,有一个简单脚本例子,它修改了一个挂单,这个挂单的申报价格比其他挂单的价格更接近脚本所附的点(

或者这个脚本的第5-6块有错误,因为(在我看来)

应该

这样的,因为所有类型的非挂单(市场)订单的类型都是0或1,即小于2。

或者我误解了什么。

问题:请你让我明白:如果我误解了

什么,到底是 什么

提前感谢你的回答

亲爱的...不要在这里写这么大的字......你可能会打破你的眼睛 :-)

和那...在你提问之前......你有没有试过在MetaEditor中阅读BACKGROUND?全部?......首先......这样你就不会问关于类型和类似东西的愚蠢问题....

===

OrderSend() 函数的操作类型。 可以是以下任何一个值。

恒定 价值 描述
OP_BUY 0 购买
销量:OP_SELL 1 出售
OP_BUYLIMIT 2 买入上限挂单
OP_SELLLIMIT 3 悬而未决的卖出限价单
OP_BUYSTOP 4 悬而未决的买入止损单
OP_SELLSTOP 5 悬而未决的卖出止损单
 

但就类型而言--没有什么问题...正是==0应该是...

因为在第三块

      if (OrderType()<2) continue;           // Рыночный ордер  

市场订单被跳过...

===

如果在订单列表中发现挂单,TYPE变量将不等于0。

---

 

下午好。你能给我一个提示吗?

例如,我们有MA通过Level_R和Level_S的标准。

int Criterion;
double MA_1=iMA(......,0);
double MA_2=iMA(......,1);
double MA_3=iMA(......,2);
if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 MA_3 <= Level_S_3) Criterion=1;
if(MA_1 > Level_R_1 && Ma_2 <= Level_R_2 MA_3 <= Level_R_3) Criterion=2;

问题:我们如何记忆标准,使它保持一个1或2的值(取决于通过),直到新的通过发生,而不是在随后的刻度上重置。

 
将变量定义放在Start或其他函数之外...进入全局变量...
 
Aleksander:
将变量定义放在Start或其他函数之外...进入全局变量...
我已经试过了,他一直在骂人......暗示着我的无能。
 
然后,如果文本较小,就发布整个文本......最多 20-30 行
 
int Criterion, Crit;
int start()
 {
  Crit= Fun_Criterion( Criterion); 

  switch(Crit)
   {
   /************/
   }
return(0);
 }

Fun_Criterion(int Criterion)
 {
  if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 MA_3 <= Level_S_3) Criterion=1;
  if(MA_1 < Level_R_1 && Ma_2 >= Level_R_2 MA_3 >= Level_R_3) Criterion=2;

  return(Criterion);
 }
 

为什么会有中间人? FUN的功能是什么?

int Criterion;
int start() {
  Fun_Criterion(); 

  switch( Criterion)
   {
   /************/
   }
  return(0);
}
//-----------------------------
void Fun_Criterion() {
  if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 &&  MA_3 <= Level_S_3) Criterion=1;
  if(MA_1 < Level_R_1 && Ma_2 >= Level_R_2 &&  MA_3 >= Level_R_3) Criterion=2;
 }

而&&的位置不对......

 
在我看来,是TRANSFERABLE PARAMETER))))),但我不能没有它)))。谢谢,修好了,正在工作。