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(){
staticint a = 12;
return;
}
#property indicator_chart_window#property indicator_buffers1#property indicator_color1 Red
//--- input parameters//--- buffersdouble ExtMapBuffer1[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- indicatorsSetIndexStyle(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;
staticdouble MA_otshet; //здесь хранится запись значения MA_otshetfor(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_otshetif(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);
}
//+------------------------------------------------------------------+
//--------------------------------------------------------------------// timeevents.mq4// Предназначен для использования в качестве примера в учебнике MQL4.//--------------------------------------------------------------- 1 --externdoubleTime_Cls=16.10; // Время закрытия ордеровboolFlag_Time=false; // Флаг, сообщения ещё не было //--------------------------------------------------------------- 2 --intstart()// Спец. функция start{intCur_Hour=Hour(); // Серверное время в часахdoubleCur_Min =Minute(); // Серверное время в минутахdoubleCur_time=Cur_Hour + Cur_Min100; // Текущее времяAlert(Cur_time);
if(Cur_time>=Time_Cls)// Если наступило время событияExecutor(); //.. то выполняем задуманноеreturn; // Выход из start()}//--------------------------------------------------------------- 3 --intExecutor()// Пользовательская функция{if(Flag_Time==false)// Если ещё не было сообщения..{// .. то сообщаем (1 раз)Alert("Время важных новостей. Закройте ордера.");
Flag_Time=true; // Теперь сообщение уже было}return; // Выход из польз. функции}
int start() {
switch(DayOfWeek()){// если пятница,суббота, и т.д.case4://пятницаcase5://суббота на всякий случайcase6://воскресенье на всякий случайif((Hour()==22 && Minute()>=00) || Hour()>22){
// Выполняем какое то действие в пятницу после 22:00
}
break;
case0://понедельникcase1://вторникcase2://средаcase3://четвергif(Hour()>23 || (Hour()==23 && Minute()>55)){
// все остальные действия в нормальные рабочии дни ПОСЛЕ 23:55
}
break;
default: {//все остальные действия в нормальные рабочии дни до 23:55
}
}
}
子供じみた質問があります。変数はコードヘッダで宣言します。グローバルに通用するはずです。しかし、その違いがわからない
から
この変数がヘッダで宣言されている場合。理想は、変数のスコープによるものです。しかし、どちらの場合も関数内部で見ることができます。テスト(スクリプト)を作ってみました。
- 特に違いは感じませんでした。その違いがわからないので、説明してもらえますか?
関数内部で静止画を宣言するのは理にかなっている。スコープはファンクションブロックのみです。
仕組みは同じです。
どのような場合に違いが感じられるのでしょうか?ALXIMIKS さん、こちらこそ返信ありがとうございました。
こんにちは。
iphone/ipadにインストールしたmt4に追加でインジケーター/ロボットをインストールする方法を教えてください。 原則的には可能なのでしょうか?Windowsなら初歩的なことですが、Appleの モバイル製品ではそう簡単にはいきません。
論理的には可能である。何しろ、すでに多くのインジケーターがプリインストールされているのですから。しかし、何をどこにコピーすればいいのか、ファイル構成が違うのでよくわからない。このような問題に遭遇したことのない方はいらっしゃいますか?
ありがとうございました。
移動平均を ベースにしたインジケータを作っています。指定されたポイント内での重要でない動きをカットすることです。例えば、50pipsのフィルターを設定するとします。指標は減少しているが、減少幅は50pips以下であるため、昨日の平均値を取り、それを書き込んで、現在の日付のレベルを設定します。次のバーで、現在値から記録した値を引いた差を確認し、合計が50pipsを超えなければ、静的変数に格納されているレベルを現在値に設定します。それを超えると、その値は現在の値となる。つまり、シフトがゼロの移動平均と同様である。いろいろなバリエーションを試しましたが、今のところ正しい解決策は見つかっていません。
わかりやすくするために、下降線だけを描画するコードを添付しておきます。問題は、上昇中のインジケーターの描画です。そしてメインは、テスターで動かすとインジケーターが変化しているのが目視で確認できるのに対し、フィルター外には出口がないことです。 記録された「MA_otshet」の値がどこかで失われているのだと推測されます。
こんにちは、よろしくお願いします。
すべての注文を23:55にクローズする必要がありますが、金曜日の取引は22:00に終了するため、取引に問題があります。
私は時間のセクションでチュートリアルスクリプトで見つかったヘルプは、一日のパラメータ番号を追加してください、すなわち金曜日の受注は21 55で、通常の日に23 55で閉鎖されたか、既製のソリューションがある場合は、リンクを共有することができます。
//--------------------------------------------------------------- 4 --
簡単!!!
ありがとうございます。しかし、手がかりはあるのだろうか。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();
ありがとうございます。でも、あの、ヒントを教えてくれませんか?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();
その原理は決して難しいものではありません。今日の損益を計算するために、次の値を渡す必要があります:fCalculate_Pribul (-2, iTime (Symbol(), PERIOD_D1, 0), "").
こんにちは、よろしくお願いします。
すべての注文を23:55にクローズする必要がありますが、金曜日の取引は22:00に終了するため、取引に問題があります。
私は時間のセクションでチュートリアルスクリプトで見つかったヘルプは、一日のパラメータ番号を追加してください、すなわち金曜日の受注は21 55で、通常の日に23 55で閉鎖されたか、既製のソリューションがある場合は、リンクを共有することができます。
//--------------------------------------------------------------- 4 --
もちろん、このコードはスクラッチで書かれたものですが、少なくとも理解できるはずです。
この部分は、線の太さをどこで指定しているのでしょうか。恥ずかしくなったくらいです。:(