どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 360

 
gyfto:

子供じみた質問があります。変数はコードヘッダで宣言します。グローバルに通用するはずです。しかし、その違いがわからない

から

この変数がヘッダで宣言されている場合。理想は、変数のスコープによるものです。しかし、どちらの場合も関数内部で見ることができます。テスト(スクリプト)を作ってみました。

- 特に違いは感じませんでした。その違いがわからないので、説明してもらえますか?

スタティックが1つ増えましたね。また、なくても動作します。関数内部で静止画を宣言するのは理にかなっている。ファンクションブロックの範囲のみ。
 
Zhunko:
関数内部で静止画を宣言するのは理にかなっている。スコープはファンクションブロックのみです。


仕組みは同じです。

int a = 10;
int start(){
   Alert(StringConcatenate("st: a = ", a));//st: a = 10
   f1(); Alert(StringConcatenate("f1: a = ", a));//f1: a = 10
   f2(); Alert(StringConcatenate("f2: a = ", a));//f2: a = 10
}
void f1(){
   int a = 11;
   return;
}
void f2(){
   static int a = 12;
   return;
}

どのような場合に違いが感じられるのでしょうか?ALXIMIKS さん、こちらこそ返信ありがとうございました。

 

こんにちは。

iphone/ipadにインストールしたmt4に追加でインジケーター/ロボットをインストールする方法を教えてください。 原則的には可能なのでしょうか?Windowsなら初歩的なことですが、Appleの モバイル製品ではそう簡単にはいきません。

論理的には可能である。何しろ、すでに多くのインジケーターがプリインストールされているのですから。しかし、何をどこにコピーすればいいのか、ファイル構成が違うのでよくわからない。このような問題に遭遇したことのない方はいらっしゃいますか?

ありがとうございました。

 

移動平均を ベースにしたインジケータを作っています。指定されたポイント内での重要でない動きをカットすることです。例えば、50pipsのフィルターを設定するとします。指標は減少しているが、減少幅は50pips以下であるため、昨日の平均値を取り、それを書き込んで、現在の日付のレベルを設定します。次のバーで、現在値から記録した値を引いた差を確認し、合計が50pipsを超えなければ、静的変数に格納されているレベルを現在値に設定します。それを超えると、その値は現在の値となる。つまり、シフトがゼロの移動平均と同様である。いろいろなバリエーションを試しましたが、今のところ正しい解決策は見つかっていません。

わかりやすくするために、下降線だけを描画するコードを添付しておきます。問題は、上昇中のインジケーターの描画です。そしてメインは、テスターで動かすとインジケーターが変化しているのが目視で確認できるのに対し、フィルター外には出口がないことです。 記録された「MA_otshet」の値がどこかで失われているのだと推測されます。

#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Red 
//--- input parameters
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(0,ExtMapBuffer1);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),                      
    limit;
    double
    raznica,raznica_static,MA_0_t,MA_1_t;
   static double MA_otshet;  //здесь хранится запись значения MA_otshet
   
   for(int i=0;i<Bars;i++)
   {  
      MA_0_t=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,i+0);  
      MA_1_t=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,i+1); 
      raznica=MA_0_t-MA_1_t; //разница между сегодня и вчера по скользящей средней
      raznica_static=MA_0_t-MA_otshet; //разница между сегодня и MA_otshet

      if(raznica > -0.005 && raznica <= 0) // если raznica не превышает заданное число 
          {
          MA_otshet=MA_1_t; // записываем значение MA_otshet
          }
      if(raznica_static > - 0.005 && raznica_static <= 0) //если raznica_static не превышает заданное число
          {
          ExtMapBuffer1[i]=MA_otshet;  // то рисуем значение индикатора, как записанный MA_otshet
          }
      if(raznica_static < - 0.005) // если raznica превышает заданное число
          {
          ExtMapBuffer1[i]=MA_0_t; // то рисуем значение по текущей цене
          }
   } 
   return(0);
  }
//+------------------------------------------------------------------+
 

こんにちは、よろしくお願いします。

すべての注文を23:55にクローズする必要がありますが、金曜日の取引は22:00に終了するため、取引に問題があります。

私は時間のセクションでチュートリアルスクリプトで見つかったヘルプは、一日のパラメータ番号を追加してください、すなわち金曜日の受注は21 55で、通常の日に23 55で閉鎖されたか、既製のソリューションがある場合は、リンクを共有することができます。

//--------------------------------------------------------------------
// timeevents.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
extern double Time_Cls=16.10;          // Время закрытия ордеров
bool Flag_Time=false;                  // Флаг, сообщения ещё не было 
//--------------------------------------------------------------- 2 --
int start()                            // Спец. функция start
  {
   int    Cur_Hour=Hour();             // Серверное время в часах
   double Cur_Min =Minute();           // Серверное время в минутах
   double Cur_time=Cur_Hour + Cur_Min100; // Текущее время
   Alert(Cur_time);
   if (Cur_time>=Time_Cls)             // Если наступило время события
      Executor();                      //.. то выполняем задуманное
   return;                             // Выход из start()
  }
//--------------------------------------------------------------- 3 --
int Executor()                         // Пользовательская функция
  {
   if (Flag_Time==false)               // Если ещё не было сообщения..
     {                                 // .. то сообщаем (1 раз)
      Alert("Время важных новостей. Закройте ордера.");
      Flag_Time=true;                  // Теперь сообщение уже было
     }
   return;                             // Выход из польз. функции
  }

//--------------------------------------------------------------- 4 --

 
r772ra:
簡単!!!


ありがとうございます。しかし、手がかりはあるのだろうか。1日分でいいんです。それは、直近の営業日の利益情報を表示することです

変数が宣言されている。うまくいかないんです。すべてゼロです。

for (p=0; p<OrdersHistoryTotal(); p++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

if (StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))<OrderCloseTime() && (OrderType()==OP_BUY || OrderType()==OP_SELL) )

p0+=OrderProfit()+OrderCommission()+OrderSwap();

}

}

double r0=p0*100/AccountBalance();

 
Zolotai:


ありがとうございます。でも、あの、ヒントを教えてくれませんか?1日だけでいいんです。つまり、直近の営業日の利益情報を表示するために

変数が宣言されています。うまくいかないんです。すべてNULLです。

for (p=0; p<OrdersHistoryTotal(); p++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

if (StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))<OrderCloseTime() && (OrderType()==OP_BUY || OrderType()==OP_SELL) )

p0+=OrderProfit()+OrderCommission()+OrderSwap();

}

}

double r0=p0*100/AccountBalance();


この Expert Advisorは、MM_Lightライブラリとその関数を搭載しています。

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Считаем итоги работы по своим ордерам                                      |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fCalculate_Pribul (int fi_OP = -2,              // тип (BUY\SELL) учитываемых ордеров
                          datetime fdt_TimeBegin = 0,  // момент времени, с которого производим расчёт
                          string fs_Comment = "")      // комментарий ордеров
{
    double   ld_Pribul = 0.0;
    int      history_total = OrdersHistoryTotal();
//----
    for (int li_ORD = 0; li_ORD < history_total; li_ORD++)
    {
        if (!fCheck_MyOrders (li_ORD, fi_OP, MODE_HISTORY)) continue;
        if (fdt_TimeBegin > OrderCloseTime()) continue;
        if (fs_Comment != "") {if (StringFind (OrderComment(), fs_Comment) < 0) continue;}
        ld_Pribul += (OrderProfit() + OrderSwap() + OrderCommission());
    }
//----
    return (ld_Pribul);
}
その原理は決して難しいものではありません。今日の損益を計算するために、次の値を渡す必要があります:fCalculate_Pribul (-2, iTime (Symbol(), PERIOD_D1, 0), "").
 
sannin:

こんにちは、よろしくお願いします。

すべての注文を23:55にクローズする必要がありますが、金曜日の取引は22:00に終了するため、取引に問題があります。

私は時間のセクションでチュートリアルスクリプトで見つかったヘルプは、一日のパラメータ番号を追加してください、すなわち金曜日の受注は21 55で、通常の日に23 55で閉鎖されたか、既製のソリューションがある場合は、リンクを共有することができます。

//--------------------------------------------------------------- 4 --

もちろん、このコードはスクラッチで書かれたものですが、少なくとも理解できるはずです。

int start() {
switch(DayOfWeek()){// если пятница,суббота, и т.д.
 case 4://пятница
 case 5://суббота на всякий случай
 case 6://воскресенье на всякий случай
             if((Hour()==22 && Minute()>=00) || Hour()>22){
                 //   Выполняем какое то действие  в пятницу после 22:00
             }
             break;
 case 0://понедельник
 case 1://вторник
 case 2://среда
 case 3://четверг
             if(Hour()>23 || (Hour()==23 && Minute()>55)){
                // все остальные действия в нормальные рабочии дни ПОСЛЕ 23:55
             }
              break;
  default:   {//все остальные действия в нормальные рабочии дни до 23:55
  
             }
 }                   
}
 
SetIndexStyle(1,DRAW_LINE,STYLE_DASH,0);
この部分は、線の太 さをどこで指定しているのでしょうか。恥ずかしくなったくらいです。:(
 
Link_x:
この部分は、線の太さをどこで指定しているのでしょうか。恥ずかしくなったくらいです。:(
最後のパラメータです。