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
}
}
}
我有一个很幼稚的问题。变量是在代码头中声明的。它们应该是全球性的。但我不明白其中的区别
从
如果该变量在标题中被声明,则为 "A"。理想情况下,按变量的范围。但在这两种情况下,它在函数内部是可见的。我做了一个测试(脚本)。
- 没有注意到任何差异。你能解释一下它们的区别吗,因为我不明白。
在函数中声明静态是有意义的。该范围只是一个功能块。
它的工作方式也是如此。
在哪种情况下,会感觉到差异?ALXIMIKS,也谢谢你的回答。
你好!
你能告诉我如何在安装在iphone/ipad上的mt4上安装一个额外的指标/机器人吗? 原则上,这可能吗?对于Windows来说,这很简单,但对于苹果 的移动产品来说,就不是那么明显了。
逻辑上说,这是可能的。毕竟,一些指标已经被预装了。但复制什么和在哪里复制并不清楚,文件结构是不同的。有没有人没有遇到过这样的问题?
提前感谢。
我正在做一个基于移动平均线 的指标。这个想法是为了切断指定点内的不重要的运动。比方说,我们设置了一个50点的过滤器。该指标正在下降,但下降幅度小于50点,因此我们取昨天的平均值,并将其记下,为当前日期设定其水平。在下一个交易日,我们检查差值,即当前值减去我们记录的值,如果总数不超过50点,我们将存储在静态变量中的水平设置为当前值。如果该值超过它,该值就成为当前值,即类似于移动平均线,移位为零。我已经尝试了不同的变化,但到目前为止,我还没有找到正确的解决方案。
为了简单起见,我在此附上只画下降的代码。问题是,该指标在上升中绘制。而最主要的是,当我在测试器中运行时,我可以直观地看到指标的变化,而在过滤器外却没有出口。 我假设在某个地方,记录的 "MA_otshet "的值被丢失了。
下午好,请帮助。
我需要所有的订单在23点55分关闭,而周五的交易在22点结束,所以交易有问题。
我发现在教程脚本的时间部分的帮助下,请添加当天的参数号码,即周五的订单在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天的信息。也就是说,要显示最后一个工作日的利润信息
变量被声明。它不起作用。这都是无效的。
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点结束,所以交易有问题。
我发现在教程脚本的时间部分的帮助下,请添加当天的参数号码,即周五的订单在21 55关闭,在正常的日子里在23 55关闭,或者可以分享链接,如果有现成的解决方案。
//--------------------------------------------------------------- 4 --
当然,这段代码是从头开始写的,但它应该可以工作,至少你应该理解它。
这一部分在哪里规定了线的厚度?我甚至感到很尴尬。:(