[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 615

 
yosuf:
代码是什么?
你的EA中不是有一个代码吗?在所有的专家顾问系统中,一切几乎都是一样的!它们只是在编码方式和编码者的偏好上有所不同。看看你的,继续做吧!
 
rigonich:

顺便说一句,对这个问题琢磨了很久,但从未发现,只是忘了。测试人员从哪里获得停止播放的数值?如果实际数值可以被服务器改变,那么测试结果应该取决于测试的时间,而事实并非如此,我检查过。或者,存储在符号属性中的值和服务器在请求时给出的值不一样?
来自市场环境的变量在 symbols.raw(推测)服务文件中,该文件在服务器历史文件夹中。当没有连接到服务器 或在周末时,终端从这个文件中获取最后的数据。
 
xant:

严谨

这是某种玩笑还是什么?你在哪里笑?

塔拉斯比

你不能?那就别做了。

听着,你这个大耳怪,你已经得到了帮助,你甚至不能把一个现成的代码带入你的专家顾问中!你知道吗?而你只是张嘴就来。你至少可以向一个白痴解释!BY.
 

塔拉斯比

是他妈的不动,混蛋。你是个怪人。因为你甚至不能用俄语正确表达两个字。

你是个混蛋吗?好吧,我不需要折磨你。得到一些休息。

 
TarasBY:
来自市场环境的变量在 symbols.raw(大概)服务文件中,该文件位于服务器历史文件夹中。当没有连接到服务器或在周末时,终端从这个文件中获取最新的数据。


谢谢你。
 
xant:

严谨

这是某种玩笑还是什么?你在哪里笑?

塔拉斯比

你不能?好吧,你不应该有。

我是用俄语写的--教科书中几乎没有关于全局变量的声明。例如,我不知道fGet_MineGV()是什么。

它是一个函数吗?如果是这样,它是做什么的?在教科书中搜索fGet,结果为零。

我应该在int init()中声明什么?你已经写了。

{
fGet_MineGV()。
}


在我的EA中,init的初始化是这样的。

int init()
{
ArrayInitialize(buf3,0)。
ArrayInitialize(b1,0)。
ArrayInitialize(b2,0)。
ArrayInitialize(b3,0)。
ArrayInitialize(b4,0)。


Comment("计算平均值 "+ind)。
m1=NormalizeDouble(iCustom(NULL,tf,ind+"_a",0,0),2)。
string d="平均值 "+ind+"+DoubleToStr(m1,2)。
tm=TimeCurrent()。
int q=0,ticket=-1;
双重OPR=0,lot1=0。
for(q=0;q<OrdersTotal();q++)
{

以此类推,还有100行。去哪里,在什么地方,最重要的是,我在这里到底应该申报什么?用俄语写作真的这么难吗?让我们弯曲我们的手指,是的。

这是一个函数吗?如果是这样,它的作用是什么?教科书上搜索fGet的结果为零。

是的,这个功能,在教程中不可能有任何关于它的内容,在编写教程的时候,它还没有出现。这是一个用户定义的函数,是专门为你写的。

      void fGet_MineGV (string fs_PrefName = ""// префикс имени переменной
       {
        string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
        if (GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
        if (GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
        if (GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
        if (GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
        //----
    }
 
晚上好!跟踪止损在下单 后立即发挥作用。只有当带有票据袋的订单进入历史记录时,它才会起作用,而且它将严格按照TakeProfit移动。


//***************************************   
 
  nahodka=false;
 
 
 if (OrderSelect(tocket, SELECT_BY_TICKET , MODE_HISTORY))  
 if (OrderTakeProfit( )-3*Point<profitsell&&OrderTakeProfit( )+3*Point>profitsell) nahodka=true;
     // Находим ордер, сработавший именно по тейкпрофиту 
 
 
  
 if(nahodka){if (OrderSelect(tecket,SELECT_BY_TICKET)){
 if(OrderStopLoss( )>Bid+treylingstop*Point ){ Print ("четвёртаямодифи    " );
 OrderModify(  tecket, OrderOpenPrice(), Bid+treylingstop*Point, OrderTakeProfit(), 0, CLR_NONE);}}}
  // Модифицируем оставшийся ордер
 for ( i = OrdersTotal() - 1; i >= 0; i--)
 

严谨

我一开始就这样做了。我在init函数中插入了这段代码,编译后得到了一个注释。

函数"fGet_MineGV "未被引用,将从exp-file中删除。

这个警告对我来说很清楚,因为那里还没有记录,所以它不能读取任何东西,对吗?

之后,我在函数start里面写了第二部分的代码。这个片段看起来像这样

void fSave_MineGV (string fs_PrefName = "") //变量名称前缀
{
static datetime ldt_NewBar;
datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
//---- Save at beginning of each minute
if (ldt_NewBar == ldaTeginBar) return;
ldt_NewBar = ldaTBeginBar;
//---- 依次保存每个变量的值
string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1") 。
GlobalVariableSet (ls_Name, SUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
GlobalVariableSet (ls_Name, SUA1);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3")
GlobalVariableSet (ls_Name, BUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
GlobalVariableSet (ls_Name, BUA1);
}

这一切都在这里吗?

我在计算SUA、SUA1、BUA、BUA1之后插入这部分代码。

但在编译时,专家顾问给出了以下输出。

27个错误(s), 64个警告(s)

 

xant:

严谨

我一开始就这样做了。我在init函数中插入了这段代码,编译后得到了一个注释。

函数 "fGet_MineGV "未被引用,将从exp-file中删除。

这个警告对我来说很清楚,因为那里还没有记录,所以它不能读取任何东西,对吗?

之后,我在函数start里面写了第二部分的代码。这个片段看起来像这样

void fSave_MineGV (string fs_PrefName = "") //变量名称前缀
{
static datetime ldt_NewBar;
datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
//---- Save at beginning of each minute
if (ldt_NewBar == ldaTeginBar) return;
ldt_NewBar = ldaTBeginBar;
//---- 依次保存每个变量的值
string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1") 。
GlobalVariableSet (ls_Name, SUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
GlobalVariableSet (ls_Name, SUA1);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3")
GlobalVariableSet (ls_Name, BUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
GlobalVariableSet (ls_Name, BUA1);
}

这里的一切都正确吗?


函数描述既不能放在start中,也不能放在inite中,更不能放在其他函数中。 它们必须分开放置。 你可以把它放在你的EA中间,或在开头,或在结尾,但不能放在其他函数中。你应该只把函数调用 放在init中,你可以把它放在最开始。

这句话对我来说很清楚,因为记录还没有建立,所以不能算什么,对吗?确切地说,没有函数描述,编译器正在寻找它应该在的地方--实用性函数之外。

{

fGet_MineGV();
}

这同样适用于第二个函数。这是一本 "入门书",很难假设做编程的人,即使是初学者,也不可能知道这些。

 
Dimka-novitsek:
晚上好!拖曳止损在下单后立即生效。只有当带票的订单进入历史记录时,它才会起作用,而且它将严格按照TakeProfit进行移动。 。

但是,如果你的历史记录不是空的,你几乎肯定会发现有一个订单正好在获利时被触发?显然,你不是在搜索历史上 在TP关闭的订单,而是通过历史检查你需要的订单是如何关闭的,以及它是否根本没有关闭。这就是你需要检查的,为什么你要检查你的订单的收盘价到底是多少?三个选项 - 1.收盘价==0 - 如果订单是市场的,它不在历史中(OrderSelect()将返回false) 2.收盘价等于
赢利订单(OrderTakeProfit))
--该订单已在止损价位 关闭,3.
订单获利(OrderTakeProfit)。
-- 该订单没有在止损点关闭。