编码帮助 - 页 778

 

谁能告诉我如何使这段代码更短?如何使用for cycle来处理这个问题?

extern double S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15;
if (S1==1234) S1=DoubleToString(S1);
if (S2==1234) S2=DoubleToString(S2);
if (S3==1234) S3=DoubleToString(S3);
if (S4==1234) S4=DoubleToString(S4);
if (S5==1234) S5=DoubleToString(S5);
if (S6==1234) S6=DoubleToString(S6);
if (S7==1234) S7=DoubleToString(S7);
if (S8==1234) S8=DoubleToString(S8);
if (S9==1234) S9=DoubleToString(S9);

希望能有这样的效果,但不知道如何改变变量名称。

for(i=1; i<=9; i++){
if (S+i==1234) S+i=DoubleToString(S+i);
}
 
Karel Nagel:

谁能告诉我如何使这段代码更短?如何使用for cycle来处理这个问题?

我想做这样的事情,但不知道如何改变变量名。

由于MQL的限制,你不能用一个输入列表来初始化一个数组。(只有像{ 2, 5, 3.1 } 这样的常量表达式才行)。

但由于你无论如何都需要将双数转换成字符串,你可以使用 StringFormat。这个函数的有趣之处在于它可以接受任意 数量的参数。

StringSplit 的帮助下,它可以被用来即时创建一个数组。

string line=StringFormat("%g %g %g %g %g %g %g %g %g",S1,S2,S3,S4,S5,S6,S7,S8,S9);
string numbers[];
int count=StringSplit(line,' ',numbers);
for(int i=0; i<count; i++)
  {
   if(numbers[i]=="1234") Print(" S",i+1," == 1234");
  }
 
rsiArray[0] = iRSI(NULL,0,10,PRICE_CLOSE,1);
rsiArray[1] = iRSI(NULL,0,10,PRICE_CLOSE,2);
rsiArray[2] = iRSI(NULL,0,10,PRICE_CLOSE,3);
rsiArray[3] = iRSI(NULL,0,10,PRICE_CLOSE,4);
rsiArray[4] = iRSI(NULL,0,10,PRICE_CLOSE,5);
ArraySetAsSeries(rsiArray, true); 

upperEnv = iEnvelopesOnArray(rsiArray, 0, 5,MODE_SMA, 0, 5, MODE_UPPER, 0);
lowerEnv = iEnvelopesOnArray(rsiArray, 0, 5,MODE_SMA, 0, 5, MODE_LOWER, 0); 

我想弄清楚这个问题已经很久了,我需要帮助。

包络 值与rsiArray[0]或我在图表上看到的任何数值都不对应,我只是想不明白为什么。


有什么想法吗?


谢谢

编辑:(已修复)好的,我所需要做的就是重新启动MT4,代码运行良好。

 

我花了几个小时试图让一个EA/工具正常工作,并做了几次修改,直到我的大脑麻木。 附上一个初步的版本,一旦我克服了基本工作的障碍,我将改进它,即当一个开放的买/卖订单被添加时发出警报,当一个开放的买/卖订单被关闭时发出不同的警报。 这个版本有时工作,有时不工作,所以在这点上不可靠。


//+------------------------------------------------------------------+
//|               myNotify.mq4                                       |
//|               Notify me by sound file of change in orders        |
//+------------------------------------------------------------------+

//---- input parameters
extern string OrderClosedWav = "OrderClosed.wav";
extern string OrderOpenedWav = "OrderOpened.wav";
string sVersion = "1.39";
int iOld, iNew = 0;
int i = 0;
uchar ii = 0;
long NewOrdersHash = 0;
long OldOrdersHash = 0;

int nOrders = 0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
// +------------------------------------------------------------------+
// |  expert deinitialization function                                |
// +------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

int start()
{ 
    nOrders = 0;
    NewOrdersHash = 0;

//First Pass
    for(i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)           // NOT "OP_BUYLIMIT" || "OP_BUYSTOP" //|| "OP_SELLLIMIT" || "OP_SELLSTOP")
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 

OldOrdersHash = NewOrdersHash;
iOld =nOrders;

    Comment ("Ver ",sVersion," \n",
         iOld,"\n", iNew,"\n\n", ii,"\n\n",
         OrderOpenedWav,"\n",
         OrderClosedWav,"\n\n",
         "Old:  ",OldOrdersHash,"\n",
         "New: ",NewOrdersHash,"\n\n",
         nOrders,"\n");
// Wait
         Sleep(2000);

//Second Pass to compare after short pause
    nOrders = 0;
    NewOrdersHash = 0;
    for(i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)           // NOT "OP_BUYLIMIT" || "OP_BUYSTOP" //|| "OP_SELLLIMIT" || "OP_SELLSTOP")
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 
iNew = nOrders;

    if (ii > 24) {ii = 1;} else {ii++;}
       
    Comment ("Ver ",sVersion," \n",
         iOld,"\n", iNew,"\n\n", ii,"\n\n",
         OrderOpenedWav,"\n",
         OrderClosedWav,"\n\n",
         "Old:  ",OldOrdersHash,"\n",
         "New: ",NewOrdersHash,"\n\n",
         nOrders,"\n");
    if (OldOrdersHash != NewOrdersHash)
    {
     if (iNew > iOld)
       PlaySound(OrderOpenedWav);
     else
       PlaySound(OrderClosedWav);
    }

return(0);

}  

/*
void OrdersF()
   {

    nOrders = 0;
    NewOrdersHash = 0;
    for(int i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)          
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 
    iNew = nOrders;
    return;
   }
*/
//+------------------------------------------------------------------+

 

大家好,我是新人。我想对这个指标做一个非常简单的编辑

我如何以及在哪里简单地在水平线 的描述框中输入Alert_这个词?

让它自动出现?

期待您的答复



//+------------------------------------------------------------------+

//|                                              horizontal line.mq4 |
//|                                                          Wdholic |
//|                            https://www.mql5.com/en/users/wdholic |
//+------------------------------------------------------------------+
#property copyright "Wdholic"
#property link      "https://www.mql5.com/en/users/wdholic"
#property version   "1.00"
#property strict

#import "cfunctions.dll" 
int      MT4_ScreenToClient(int hWnd, int& iX[]);  
#import
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  { 
    double pmax=ChartGetDouble(0,CHART_PRICE_MAX);
    double pmin=ChartGetDouble(0,CHART_PRICE_MIN);
    double Ymax=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)*1.0;
   //  Alert(pmin);Alert(pmax);Alert(Ymax);
   int iCoords[2] ;
    int hWin = WindowHandle( Symbol(), Period());  
   
    MT4_ScreenToClient(hWin, iCoords);    
               
    double cory=iCoords[1]*1.0;
    double range=(pmax-pmin);
    
    double XY= (cory*1.0)/Ymax;
      double P=pmax-XY*range;
     
        
   Line("test_",P,clrAqua);
   WindowRedraw();
   return;
  }
//+------------------------------------------------------------------+

void Line(string t,double P,color C )
{ int a=1;string nm;
    nm="line_"+t+string(a);
  while(ObjectFind(0,nm)==0){ a++; nm="line_"+t+string(a);}
  
if(ObjectFind(0,nm)<0){
  ObjectCreate(0,nm,OBJ_HLINE,0,0,0); 
  ObjectSet( nm,OBJPROP_COLOR,C);}
  ObjectSet( nm,OBJPROP_PRICE1,P);  
  ObjectSet( nm,OBJPROP_SELECTED,1);  
}

 

谁能帮我编写这个代码。将矩形作为过去3个月的高点和低点,如图所示,谢谢。

附加的文件:
INDIxxx.jpg  243 kb
 

谁能帮助我们在前一个MA交叉点上止损?



 

你好。

我有一个想法。但我不太了解mq4代码。

前一高点低于前二高点,则在前一高点买入挂单*2%或1%,当当前蜡烛的价格触及该订单时买入。

前一个低点高于前第二个低点,那么在前一个低点卖出挂单*-2%或-1%,当当前蜡烛的价格触及该订单时卖出。

任何时期。无目标,无止损。追踪止损与之相反。

感谢任何人,谁可以做mq4代码。我需要帮助。只有MT4。

 

...

你能为这个策略做一个专家吗?

强化专家

设置:

1.选项:只卖出/只买入

2.TP: 50

3.Sl: 00

4.步骤: 150

5.开始手数: 0,1

6.乘法: 1.2.4.8.16... ...。

7.订单总数。100

8.神奇数字:111111

工作方法:

1- 按指定的手数在开始时自动开仓

2- 在每次加固时改变所有交易的Tp

根据以下公式。最后一个双倍头寸的Tp涵盖了我们所有的浮动损失+最后一个头寸的利润

3- 回到起始手数 .

 
BANSINO Money Maker:

...

你能为这个策略做一个专家吗?

强化专家

设置 :

1. 选项。只卖出/只买入

2.TP: 50

3.Sl: 00

4.步骤: 150

5.开始手数: 0,1

6.乘法。1.2.4.8.16... ...。

7. 订单总数。100

8. 神奇数字:111111

工作方法

1- 按指定的手数在开始时自动开仓

2- 在每次加固时改变所有交易的Tp

根据以下公式。最后一个双倍头寸的Tp涵盖了我们所有的浮动损失+最后一个头寸的利润

3- 回到起始手数 .

自由职业者 栏目中作为一项工作发布。