- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 MQL5 修改正在运行的交易的止损时遇到了问题。选择订单对我来说很合适。但是如果我尝试访问变量(例如 OrderTicket()
& OrderOpenPrice()
),它总是返回 0.00000:
2017.06.01 00:06:32.114 2016.04.08 00:00:00 failed modify buy 0.00 sl: 0.00000, tp: 0.00000 -> sl: 1.41594, tp: 0.00000 [Invalid request]
这是我的止损 modyfing void:
void modifyStops() {
int total = OrdersTotal(); // total number of placed pending orders
Print( total + " Orders on the line!!!" );
//--- Over all placed pending orders
for ( int i = 0; i < total; i++ )
{ bool isOrderSelected = OrderSelect( i, SELECT_BY_POS, MODE_TRADES );
if ( isOrderSelected )
{ // TODO: Check the Trades to contain the correct Order Number
Print( "Symbol & Magicnumber matching" );
double newStopLoss;
// Update the stop loss
if ( OrderType() == OP_BUY )
{
newStopLoss = addTolerance( SL );
}
else if ( OrderType() == OP_SELL )
{
newStopLoss = minusTolerance( SL );
}
newStopLoss = NormalizeDouble( newStopLoss, Digits );
Print( "NEW STOP LOSS::::=====> ", Symbol(), " at ", newStopLoss );
if ( !OrderModify( OrderTicket(), OrderOpenPrice(), newStopLoss, OrderTakeProfit(), 0, Green ) )
{
Print( "OrderModify returned the error of ", GetLastError() );
}
}
}
CTrade 类对我来说工作不正常。我尝试实现您发布的代码 - 但是:它似乎仍然没有成功。
不幸的是,我在我的 EA 中实现了它,当交易有效时,OrderGetTicket(i) 返回零。所以我的虚空看起来像这样:
void modifyStops() {
for(int i=0; i<PositionsTotal();i++)
{
ulong ticket;
if((ticket=PositionGetTicket(i))>0)
{
//--- return order properties
double open_price =PositionGetDouble(POSITION_PRICE_OPEN);
datetime time_open =(datetime)PositionGetInteger(POSITION_TIME);
string symbol =PositionGetString(POSITION_SYMBOL);
int order_magic =PositionGetInteger(POSITION_MAGIC);
double volume =PositionGetDouble(POSITION_VOLUME);
double stoploss =PositionGetDouble(POSITION_SL);
double takeprofit =PositionGetDouble(POSITION_TP);
ENUM_ORDER_TYPE type =EnumToString(ENUM_ORDER_TYPE(PositionGetInteger(POSITION_TYPE)));
//--- prepare and show information about the order
printf("#ticket %d %s %G %s at %G, with sl: %G tp: %G was set up at %s",
ticket, // order ticket
type, // type
volume, // placed volume
symbol, // symbol
open_price, // specified open price
stoploss, //
takeprofit, //
TimeToString(time_open) // time of order placing
);
}
}
}
并且 printf 函数不返回任何内容:
2017.06.02 01:42:26.910 2016.04.07 00:00:00 #ticket 1 (non-string passed) 0 at 0, with sl: 0 tp: 0 was set up at 1970.01.01 00:00
我无法相信在 MQL5 中简单地修改 SL 会这么难。那太可怕了。但是我需要通过它来测试我在几对上的策略......
你有别的想法吗?我使用以下代码设置交易:
void createPendingOrder(ENUM_ORDER_TYPE orderType, double lots, double stopLoss) {
MqlTradeRequest request={0};
MqlTradeResult result={0};
//--- parameters to place a pending order
request.action =TRADE_ACTION_PENDING; // type of trade operation
request.symbol =Symbol(); // symbol
request.volume =lots; // volume of 0.1 lot
//request.deviation=2; // allowed deviation from the price
request.magic =224466 ; // MagicNumber of the order
//int offset = 3; // offset from the current price to place the order, in points
double price; // order triggering price
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT); // value of point
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); // number of decimal places (precision)
//--- checking the type of operation
if(orderType==ORDER_TYPE_BUY_STOP)
{
request.type =ORDER_TYPE_BUY_STOP; // order type
price =entryPrice;
request.price =NormalizeDouble(price,digits); // normalized opening price
request.sl =stopLoss;
}
else if(orderType==ORDER_TYPE_SELL_STOP)
{
request.type =ORDER_TYPE_SELL_STOP; // order type
price =entryPrice;
request.price =NormalizeDouble(price,digits); // normalized opening price
request.sl =stopLoss;
}
else Alert("This example is only for placing pending orders"); // if not pending order is selected
//--- send the request
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // if unable to send the request, output the error code
//--- information about the operation
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
}
例如,是否可以将结果对象保存在一个数组中,然后通过该对象访问正在运行的交易?
最佳答案
您的问题是您正试图在 MQL5 中运行 MQL4 代码。
MQL5 中没有OrderModify()
、OrderOpenPrice()
、OrderTicket()
!!!
参见文档 here关于如何选择、查询值和修改交易。
您需要使用 OrderGetDouble()
、OrderGetInteger()
和 OrderGetString()
来查询开盘价、止损等。例如
if((ticket=OrderGetTicket(i))>0)
{
//--- return order properties
open_price =OrderGetDouble(ORDER_PRICE_OPEN);
time_setup =(datetime)OrderGetInteger(ORDER_TIME_SETUP);
symbol =OrderGetString(ORDER_SYMBOL);
order_magic =OrderGetInteger(ORDER_MAGIC);
positionID =OrderGetInteger(ORDER_POSITION_ID);
initial_volume=OrderGetDouble(ORDER_VOLUME_INITIAL);
type =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
//--- prepare and show information about the order
printf("#ticket %d %s %G %s at %G was set up at %s",
ticket, // order ticket
type, // type
initial_volume, // placed volume
symbol, // symbol
open_price, // specified open price
TimeToString(time_setup)// time of order placing
);
}
使用 OrderSend()
函数修改订单 https://www.mql5.com/en/docs/trading/ordersend
MQL5 使用一个复杂得多的订单、头寸、交易和历史订单系统。一个MQL5 community article试图解释它们是如何相互关联的。
循环查看挂单:
for(int i=0; i<OrdersTotal();i++)
{
if((ticket=OrderGetTicket(i))>0)
{
//--- return order properties
open_price =OrderGetDouble(ORDER_PRICE_OPEN);
time_setup =(datetime)OrderGetInteger(ORDER_TIME_SETUP);
symbol =OrderGetString(ORDER_SYMBOL);
order_magic =OrderGetInteger(ORDER_MAGIC);
positionID =OrderGetInteger(ORDER_POSITION_ID);
initial_volume=OrderGetDouble(ORDER_VOLUME_INITIAL);
type =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
//--- prepare and show information about the order
printf("#ticket %d %s %G %s at %G was set up at %s",
ticket, // order ticket
type, // type
initial_volume, // placed volume
symbol, // symbol
open_price, // specified open price
TimeToString(time_setup)// time of order placing
);
}
}
遍历并查看未平仓交易:
for(int i=0; i<PositionsTotal();i++)
{
if((ticket= PositionGetTicket(i))>0)
{
//--- return order properties
open_price =PositionGetDouble(POSITION_PRICE_OPEN);
time_open =(datetime)PositionGetInteger(POSITION_TIME);
symbol =PositionGetString(POSITION_SYMBOL);
order_magic =PositionGetInteger(POSITION_MAGIC);
volume =PositionGetDouble(POSITION_VOLUME);
stoploss =PositionGetDouble(POSITION_SL);
takeprofit =PositionGetDouble(POSITION_TP);
type =EnumToString(ENUM_ORDER_TYPE(PositionGetInteger(POSITION_TYPE)));
//--- prepare and show information about the order
printf("#ticket %d %s %G %s at %G, with sl: %G tp: %G was set up at %s",
ticket, // order ticket
type, // type
volume, // placed volume
symbol, // symbol
open_price, // specified open price
stoploss, //
takeprofit, //
TimeToString(time_open) // time of order placing
);
}
}
希望其他人能够更好地解释订单、头寸、交易、历史订单,因为它们仍然让我头疼。
为了简单起见,我通常只创建一个 CTrade Class 的实例。
使用标准交易函数和 Ctrade 类的 trailSL 买入头寸的最小示例
Ctrade *m_trade;
CSymbolInfo *m_symbol;
Void OnInit()
{
m_trade = new Ctrade();
m_trade.SetExpertMagicNumber(100);
m_symbol = new CSymbolInfo();
m_symbol.Name(Symbol());
}
void OnTick()
{
m_symbol.RefreshRates();
}
void modifysl()
{
ulong ticket;
MqlTradeRequest request = {0};
MqlTradeResult result = {0};
double newsl;
for(int i=0; i<PositionsTotal();i++)
{
ticket=PositionGetTicket(i);
if(ticket>0)
{
request.action = TRADE_ACTION_SLTP; // type of trade operation
request.position = ticket; // ticket of the position
request.symbol = PositionGetString(POSITION_SYMBOL); // symbol
request.sl = PositionGetDouble(POSITION_SL); // Stop Loss of the position
request.tp = PositionGetDouble(POSITION_TP); // Take Profit of the position
request.magic = 100; // MagicNumber of the position
newsl = NormalizeDouble(m_symbol.Bid()-100*m_symbol.Point(),
m_symbol.Digits());
if(newsl>request.sl)
{
request.sl = newsl;
if(!OrderSend(request,result))
{
PrintFormat("OrderSend error %d",GetLastError()); // if unable to send the request, output the error code
}
//--- information about the operation
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
}
}
}
}
void modifyslCtrade()
{
ulong ticket;
MqlTradeRequest request= {0};
MqlTradeResult response ={0};
double newsl;
for(int i=0; i<PositionsTotal();i++)
{
ticket=PositionGetTicket(i);
if(ticket>0)
{
newsl = NormalizeDouble(m_symbol.Bid()-100*m_symbol.Point(),
m_symbol.Digits());
if(newsl>PositionGetDouble(POSITION_SL))
{
m_trade.PositionModify(ticket,
newsl,
PositionGetDouble(POSITION_TP));
}
}
}
}
关于algorithmic-trading - 如何修改活跃交易的止损?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44295495/
我听过很多次公司喜欢HBase的强一致性。我阅读了 HBase 并喜欢它。然后我想到了mongodb write和那时候的区别。查了一下MongoDB似乎也有很强的一致性。但它是一致的吗?看起来 HB
区块链入门 ③ - 交易 交易 概述 比特币交易本质上包含交易参与者价值转移的相关信息数据结构。比特币区块链是一本全球复式记账总账簿,每笔交易都是在比特币区块链上的一个公开记录.
我有以下情况: 我正在迭代我的Affiliate 实体,对于每个实体,我需要在一个唯一的事务中保存和更新数据。因此,我有一个服务,其方法用 Spring @Transactional 注释(其中创建和
我无法理解 DaoManager 的默认行为。 DaoManager.createDao(connectionSource, theClass); 这需要一个 connectionSource - 而
我是 Spring 新手,有一个关于事务的问题。 我知道对于每个 http 请求都有一个 servlet 线程,它有自己的堆栈。据我所知,所有局部变量和方法都驻留在堆栈上。因此,如果我有一个方法 pu
我想设计一个简单的应用程序(没有 j2ee 和 jms),可以处理大量消息(比如在交易系统中) 我创建了一个服务,可以接收消息并将它们放入队列中,这样系统就不会在过载时卡住。 然后我创建了一个包装队列
如果使用 PDO 事务,是否需要锁定表? 如果用户 a 有 50 笔钱,将 50 笔转给用户 b,PDO 交易是否会确保它们都无误地执行? 另外,如果说我有一个 if 语句, if ($user['m
我正在实现一个方法,它会做类似的事情: ... try { myPojo.setProperty("foo"); myService.execute(myPojo); } catch (E
我正在尝试使用 ActiveRecord::Base.transaction。我认为使用 Rails 1.2.6 和 mysql 5.0 默认情况下回滚不起作用。多玩一点我发现 autocommit
我在我的网站上使用嵌入式支付,支付交易直接从买家到卖家发起,服务充当 API 调用方。商品价格由卖家以美元设定,以简化国际贸易。 当发件人和收件人都是俄罗斯居民时,发件人会收到错误消息: The pa
如果我删除我的应用程序中的数据,然后重新购买一些我知道该帐户已经拥有的托管 IAP,iOS 会给我原生的“您确定要重新购买该项目吗?您不会被收取费用”对话框。这符合预期。 当购买返回到我的应用程序时,
我一直在阅读 transactions & jooq但我很难看到如何在实践中实现它。 假设我为 JOOQ 提供了一个自定义 ConnectionProvider,它恰好使用了一个自动提交设置为 fal
我们正在使用 Entity Framework 并在事务范围内运行单元测试。我们最初在标题中遇到错误。 我已经设法将问题隔离开来。 using (TransactionScope scope1 = n
我有一个注册页面,基本上我需要将数据插入到 4 个表中。我是 PDO 的新手,对某些事情感到困惑。 基本上,如果任何插入失败,我不想向数据库中添加任何内容,这看起来很简单。 我的困惑是,我需要首先在我
我使用枢轴点进行交易。我在屏幕指示器上使用以下指标“CM_Pivots_Filtered”、“Pivots”、“CD_PivotR”和“CM_Gaps_Intra-Day_V2.1”。这些枢轴工作得很
我正在努力解决 Sonar 问题: squid:S2229 "Methods should not call same-class methods with incompatible "@Transa
在我的 Controller 中,我有一些类似的代码... ... if user.save something = Something.where("thing = ?", thing)
我使用 StoreKit 进行应用内购买。我发现当用户按下“取消”按钮时,API 的行为很奇怪。 例如,如果我在“确认您的应用内购买”屏幕上按“取消”,我会收到一个带有 error.code == S
AppStore 在自动续订自动续订订阅时是否会发出交易?如果是这样,如果应用程序将自己设置为观察者,那么下次应用程序加载时是否可以可靠地检测到它: [[SKPaymentQueue defaultQ
我正在研究 EMV 技术,并寻找终端和发行者之间的通信(请求/响应)以进行授权/在线 PIN 检查。 我知道离线数据验证仅在终端上进行检查,然后终端将数据发送给发行者。我想知道授权过程需要发送哪些数据
我是一名优秀的程序员,十分优秀!