//+------------------------------------------------------------------+//| Mustafa |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Mustafa"#property link"https://www.mql5.com"#property version"1.00"#property strict//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int MagicNumber= 100;
intOnInit()
{
//---
DetectExistingPattern();
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+int LastBar=0;
double HighestValue, LowestValue;
voidOnTick()
{
//---
MyStart();
}
void MyStart(){
CloseOpenedOrders();
if (LastBar == Bars) return;
LastBar = Bars;
if (!CheckForExistedOrders()) {
if (CheckTrendPattern()){
PlaceOrders();
};
};
};
bool CheckForExistedOrders(){
for(int TradeNumber = OrdersTotal(); TradeNumber >= 0; TradeNumber--){
if ( (OrderSelect(TradeNumber, SELECT_BY_POS, MODE_TRADES)) && (OrderMagicNumber() == MagicNumber )) returntrue;
};
returnfalse;
};
bool CheckTrendPattern(){
for(int i=10; i>=1; i--) {
if (High[i]>High[i-1])
returnfalse;
};
HighestValue = High[10];
LowestValue = Low[1];
returntrue;
};
void PlaceOrders(){
int OrderResult = OrderSend(Symbol(), OP_BUY, 1, Ask, 5, 0, 0, "", MagicNumber);
}
//+------------------------------------------------------------------+void CloseOpenedOrders(){
// I will use HighestValue and LowestValue here, so I need to re calculate them.
};
void DetectExistingPattern() {
// Find HighestValue and LowestValue again, this part is the reason why I opened the thread!!! I want to run this in OnInıt()// I will find opened order and find the previos pattern that cause me to open that order.
};
EA中没有OnStart(),但我明白你的意思。然而,OP甚至在回应你的评论时说,我引用。
是的,我是指OnTick()。你仍然对 "在EA运行时 "赋予了太多的意义。它不一定,甚至最合理的意思是,"当EA正在执行OnTick()时",而不是 "当EA连接到图表时,即在其整个生命周期内"。
我们需要来自paranoyakX的更多信息。
是的,我是指OnTick()。你仍然对 "在EA运行时 "赋予了太多的意义。它不一定,甚至最合理的意思是,"当EA正在执行OnTick()时",而不是 "当EA连接到图表时,即在其整个生命周期内"。
我们需要paranoyakX提供更多信息。
嗨,伙计们。
让我澄清一下。我的代码是在以前的条形图上寻找一个非常基本的模式,并将决定是否打开一个订单,但只有当一个新的条形图出现时,才会检查 打开新的订单。我的意思是,我正在等待最后一个条形图收盘,然后检查模式,如果它是确定的,我将打开订单。
如果我不得不重新运行EA,我想再次找到这些基本信息(模式的开始和结束栏,最高和最低价格等)并再次填充我的全局变量,这就是为什么我需要这个。我将使用开始和结束信息来决定何时关闭我的订单。因此,在EA运行时,如果OnInit时没有出现新的条形就足够了,这不是一个问题。
是的,我是指OnTick()。你仍然对 "在EA运行时 "赋予了太多的意义。它不一定,甚至最合理的意思是,"当EA正在执行OnTick()时",而不是 "当EA连接到图表时,即在其整个生命周期内"。
我们需要来自paranoyakX的更多信息。
嗨,伙计们。
让我澄清一下。我的代码是在以前的条形图上寻找一个非常基本的模式,并决定是否打开订单,但只有在新条形图出现时才会检查打开新订单。我的意思是,我在等待最后一个条形图收盘,然后检查模式,如果它是确定的,我将打开订单。
如果我不得不重新运行EA,我想再次找到这些基本信息(模式的开始和结束栏,最高和最低价格等)并再次填充我的全局变量,这就是为什么我需要这个。我将使用开始和结束信息来决定何时关闭我的订单。因此,在EA运行时,如果OnInit时没有出现新的条形就足够了,这不是一个问题。
你不应该在OnInit() 中做所有这些事情。你应该在OnTick() 中完成所有这些逻辑(包括恢复)。这一点很重要!在OnInit() 中做会导致你没有预料到的更多问题,并且会让你的EA在做所有这些逻辑时处于 "初始化 "状态。所以,要做得正确!在OnInit() 中只做你的初始化(如变量、外部参数检查等),其他都在OnTick() 中做。
不不不!我无法解释我自己,对不起,我在OnTick中运行所有的东西。但简单地说,我检查了 这个tick是否属于一个新的bar,然后做我的工作人员。我在OnInit中运行的是,重新找到订单和我之前计算的模式,重新计算。我说这是在OnInit运行,找到我的模式,目前打开的订单属于。
我希望我可以解释一下。
不不不!我无法解释我自己,对不起,我在OnTick中运行所有的东西。但简单地说,我检查了这个tick是否属于一个新的bar,然后做我的工作人员。我在OnInit中运行的是,重新找到订单和我之前计算的模式,重新计算。我说这是在OnInit运行,找到我的模式,目前打开的订单属于。
我希望我可以解释。
是的,我在你的帖子中理解了这一点。我说的是不要在OnInit()中这样做。你应该在OnTick()中找到你的订单和模式以及所有的计算。
只要在OnTick()中定义一个本地静态变量,并完成所有的检查和 模式定义,然后将该变量设置为false。
是的,我在你的帖子中理解了这一点。我想说的是,不要在OnInit()中这样做。你应该在OnTick()中找到你的订单和模式以及所有这些计算。
只要在OnTick()中定义一个本地静态变量,并完成所有的检查和模式定义,然后将该变量设置为false。
对不起,我之前误解了你的意思。为什么我不在OnInit上这样做?这不是更方便吗?当我这样做的时候,对于第一个刻度 之后的每一个刻度,我都要运行if语句,而这个语句不会是真的。我认为这对代码来说是不必要的负担。
OnInit的存在不就是为了初始化一些全局变量吗?
我希望我可以解释一下。
我认为我们需要看到一些代码来确定你在说什么。例如,不清楚你是否在寻找产生现有未平仓交易的历史模式,因为(a)它告诉你如何管理未平仓交易,在哪里/什么时候关闭它等等,或者(b)只是为了在图表上画一些标记,向自己解释为什么现有交易被打开。
我一般同意FMIC的观点,即你应该尽量在OnTick()中做更多的事情,并在全局变量中保持尽可能少的状态。
对不起,我之前误解了你的意思。为什么我不在OnInit上这么做?这不是更方便吗?当我这样做的时候,对于第一个刻度之后的每一个刻度,我都要运行if语句,而这个语句不会是真的。我认为这对代码来说是不必要的负担。
OnInit的存在不就是为了初始化一些全局变量吗?
谢谢你的建议,这是我的代码的一个非常简单的版本,这不是我真正的代码,但我希望这能更清楚。
正如我所说,这不是真正的代码,寻找模式等只是一个例子。我开这个话题的原因是DetectExistingPattern()函数