我的方法。核心是引擎。 - 页 128

 
Vasiliy Sokolov:

妈的,伙计,你真的不明白发生了什么,还是你想用这种方式来偷工减料?

在任何小组中,最根本和最复杂的事情是显示一致性。如果一个订单是开放的 - 它应该被显示出来,如果它不在交易标签中,它也不应该出现在面板中。这在概念上是基本的、"非常简单 "的。但为了使其 "非常简单",该小组需要基于一个状态模型。你没有这样的东西,只有一些塞进用户对象的字符串的本地不一致的曲线数据库。

而现在你试图向我们证明没有问题,这一切都被凭空吸走了。 你的表格中不可显示的订单是好的.在你的表格中的订单,但事实上早已被关闭 - 这也是正常的。而 总的来说,一切都很正常,很好,只是职位的数量被限制在20个。

你理解的问题是通过内部手段解决开/关单的执行 问题。这不是表格本身机制的一部分。它是一个用户机制!

与其批评引擎和表的实现,不如写一个合适的机制来解决订单的开启和关闭

一切都会顺利进行!"。

 
Реter Konow:

  1. 要做到这一点,用户必须自己写一个循环,在刻度或计时器上的订单,并检查它们的刻度和写在数组中的刻度。如果数组中没有票据,说明订单刚刚被打开,这时应该调用E_Main_form_1__PnL(OrderTicket(),OrderProfit())

4.如果你正确地写出这些顺序循环,那么该表将正确地工作....

我只是忘了....

但这并不意味着动态表本身不起作用。

伙计,用户必须熟悉文件,他知道在什么数组中放什么,以及如何更新这些文件吗?我要求你写一个完整的工作示范,这将从你的代码中了解如何做,做了什么,在哪里,插入了什么,但你擦掉了我的TOR,并以一个歪歪扭扭的表格的形式还给了我!

 
Vasiliy Sokolov:

我只是觉得在你身上有一大堆的忽视,在你的代码和你所做的所有事情中,算是为人们做的,但是当涉及到具体细节时,废话就开始了。做一件小而好、质量高的事。你说一切都很容易解决,很初级。但由于某些原因,你做了一个解决方案,其中什么都没有。是什么阻碍了你在两星期内完成所有这些简单的筹码?

很抱歉对你的消极态度。只是,你让我很失望。我希望能看到更多、更好的东西。请修复你的演示。按照要求做好、做精、做细,不要说 "是的,这很基本,这里需要调整一下"。 提出一个跳出框框的解决方案,这可能会受到抗议。

瓦西里,不要情绪化。我从未有过任何不敬。我只是很久没有与订单打交道了,已经忘了怎么做。但这是一项用户任务。

但我还是会这样做。既然你觉得如此困难...

 
Реter Konow:

瓦西里,不需要感情用事。我没有任何不敬的意思。我只是很久没有与订单打交道了,忘记了怎么做。但这是一项用户任务。

但我还是会这样做。如果你认为它是如此复杂...

那就去做吧。我不觉得有多复杂,但我重复一遍,你的引擎没有文档,我不知道该用哪个数组更新什么参数。我需要的是以完整解决方案的形式进行演示。这是了解你在做什么和如何工作的唯一途径。这正是我对你的期望。当你创建它时,我们将讨论技术解决方案。而一般来说,要把外界的批评,甚至是专家的批评当作积极的批评,因为消极的反馈通常比积极的反馈更有价值。

 

我将解释动态表是如何工作的。

1.当买入/卖出按钮被点击时,信号会进入按钮本身的案例块中的外部连接文件。

case BUTTON3___BUY:
               //------------------------------------------------------------------------------------------------------
               //What to do when button pressed or released?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                case pressed:     break;
  
                case released:  
                               
                              int ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-30*Point,Ask+50*Point,NULL,16384,0,Green);  
                              //--------------------------------------------------------------------------------------- 
                              if(ticket>0)
                                {
                                 if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                                   {
                                    Alert("BUY order opened");
                                    //----------------------------------------------------
                                    E_Main_form_1__Order(ticket,ticket);
                                    E_Main_form_1__Opening_Time(ticket,TimeToStr(OrderOpenTime(),TIME_MINUTES|TIME_SECONDS));
                                    E_Main_form_1__Type(ticket, "BUY");
                                    E_Main_form_1__Volume(ticket,OrderLots());
                                    E_Main_form_1__Symbol(ticket, OrderSymbol());
                                    E_Main_form_1__Price(ticket, OrderOpenPrice());
                                    E_Main_form_1__Comission(ticket, OrderCommission());
                                    E_Main_form_1__Swap(ticket, OrderSwap());
                                    E_Main_form_1__PnL(ticket, OrderProfit()); 
                                    //----------------------------------------------------
                                   }
                                 //--------------------------------------  
                                 ArrayResize(Orders,OrdersTotal());
                                 Orders[OrdersTotal() - 1] = ticket;   
                                 //--------------------------------------                                    
                                }
                              else Print("Error opening BUY order : ",GetLastError());
                              //---------------------------------------------------------------------------------------
                break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;

你必须知道,如果一个新的票据被 发送到E_Main_form_1__Price(ticket, OrderOpenPrice()); 函数,就会自动打开一个新行。

如果票据已经存在,将自动选择所需的行,并在那里设置新的值。

要关闭表中的一行,请调用函数 E_Main_form_1_CLOSE_ROW___Orders_table(ticket)。

票是指行票

 
Реter Konow:

我将解释动态表是如何工作的。

1.当买入/卖出按钮被点击时,信号会进入按钮本身的案例块中的外部连接文件。

你必须知道,如果一个新的票据被 发送到E_Main_form_1__Price(ticket, OrderOpenPrice()); 函数,就会自动打开一个新行。

如果票据已经存在,将自动选择所需的行,并在那里设置新的值。

要关闭表中的一行,请调用函数 E_Main_form_1_CLOSE_ROW___Orders_table(ticket)。

车票是指行票

彼得,在定时器中做一个for循环,通过未结订单并将订单列表中的变化发送到你的表中。另外,要确保你表中的订单利润也是动态变化的。

 
Реter Konow:

我将解释动态表是如何工作的。

1.当买入/卖出按钮被点击时,信号会进入按钮本身的案例块中的外部连接文件。

你必须知道,如果一个新的票据被 发送到E_Main_form_1__Price(ticket, OrderOpenPrice()); 函数,就会自动打开一个新行。

如果票据已经存在,将自动选择所需的行,并在那里设置新的值。

要关闭表中的一行,请调用函数 E_Main_form_1_CLOSE_ROW___Orders_table(ticket)。

车票是指行票

这是一个歪打正着的执行,这里有一个答案。

关于交易、自动交易系统和策略测试的论坛

我的方法。核心 - 发动机。

Vasiliy Sokolov, 2019.01.09 13:33

彼得,对不起,你的作品不被接受,因为你发送的是一个罕见的黑客工作。对不起,但我似乎是唯一一个运行你发送的东西的人,除了我之外,没有其他人会做专业知识。

因此,按照顺序,任务如下。

我看到的却是。

首先,交易只能在你的面板上通过点击买入/卖出按钮打开。如果是通过标准窗口开仓,则不会出现交易

....

到目前为止,一个胖子没有 去。等待你的完善。在你搞清楚之前,不要做3D效果图!

 

假设我们有几个动态表。

连接属性文件将自动打印包装函数,以便与这些表一起工作。

下面是一个说明性的例子。我们绘制了一个动态的Orders_table 表。

这些是我们得到的包装函数。

void E_Main_form_1__Order(long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Opening_Time(long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Type(long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Volume(long Magic, string Value)
//---------------------------------------------------------------------------------------------------------
void E_Main_form_1__Symbol(long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Price(long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Comission(long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Swap(long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__PnL(long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1__Close(long Magic, string Value)
//----------------------------------------------------------------------------------------------------------------
void E_Main_form_1_CLOSE_ROW___Orders_table(long Magic)
//----------------------------------------------------------------------------------------------------------------

注意:每个包装器的名称后面都有一个dyn.table的列名。

没有指定具体的元素,只有魔法行

也就是说,要在现有行的一个单元格中设置一个新的值,你必须发送它的Magic和值。

要在一个不存在的行的单元格中设置一个新的值,你必须发送其魔力和值。该行将被自动创建。

要销毁表中的一行,你必须调用带有CLOSE_ROW 字样的包装器。

比如说。

void E_Main_form_1_CLOSE_ROW___Orders_table(long Magic)

并在其中传入你想关闭的那一行的majik。

就这样了。

 
Vasiliy Sokolov:

彼得,在定时器中做一个for循环,它将穿过未结订单并将订单列表中的变化发送到你的表中。还要确保你表中的订单的利润也是动态变化的。

好的,我会写循环和代码来处理订单,但我会把它交给你自己来放,因为我已经把引擎转换为通过资源链接,并且正在测试。现在我不能把旧的链接找回来,而且我还没有完成新的链接。

 
Реter Konow:

好的,我会写循环和代码来与订单一起工作,但我会把它交给你自己来设置,因为我已经重新设计了引擎,以通过资源进行通信,我正在测试。现在我不能把旧的链接找回来,而且我还没有完成新的链接。

用你所附的引擎的版本进行工作,作为示范。

标签 Konow:

也就是说,要在现有行的一个单元格中设置一个新值,你需要发送它的majic和值。

对我来说似乎很简单。如果你的方法和我想的一样,那么我不认为动态表或通过定时器更新位置值有什么问题。彼得,你为什么要在开始时做一个驼峰呢?)