コーディングのヘルプ - ページ 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 }の ような定数式だけが可能です)。

でも、どうせdoubleを文字列に変換する必要があるのだから、 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]に対応してないし、チャート上のどの値にも対応してないし、なぜなのかがわからない。


何かアイデアはありますか?


ありがとうございます。

EDIT: (修正済み) OK、私がする必要があったすべては、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回目の高値より低い場合、前回の高値*2%または1%で買い保留の 注文を出し、現在のローソク足がその注文に接触したら買う。

前回の安値が2回目の安値より高い場合、前回の安値*-2%または-1%で売り注文を出し、現在のローソク足がその注文に接触したら売る。

期間は問わない。ターゲットなし ストップロスなし。ストップロスは逆張りで。

mq4のコードを作ることができる人に感謝します。助けて欲しい。MT4のみ。

 

こんにちは ...

このストラテジーのエキスパートを作ってくれませんか?

強化エキスパート

設定:

1.オプション:売りのみ/買いのみ

2.TP: 50

3.スレッド: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- 最初のロットに戻る .

フリーランスの セクションで仕事としてそれを投稿してください。