請教無大 關於MT4
無無明大您好:感謝您的文章分享
由於學習的過程中不斷出現問題
又有幾個關於MT4的問題請教
1. mt4 的部分能否部分平倉
例如:
一口30 lot的多單
可否平其中3 lot變成27lot
2. 為了部分平倉
曾試著將上述問題改成
10口 3 lot 多單
但在程式執行後(用迴圈)
可能變成 成交5口
下一個tick 成交4口
再下一個tick 成交1口
這在多轉空 或 空轉多時,
倉位容易錯誤
麻煩明大了
thank you
可以 部分平倉,只要是 MT4 就可以 多空 同時存在。
(註:MT5 不行)
多空倉位同步存在後,有指令可以 一對一 多空沖銷。
例如:
1筆單 2口空單 序號:1234
1筆單 10口多單 序號:5678
1234 對 5678 沖銷後
剩下 8口 多單
不管是 是 手工沖銷 或用程式沖銷 多可以。
在 script 裡面就有
感謝明大
再請教
如您舉的例子,我可否在擁有一筆10口多單的情形下,用程式幫我平其中2口,剩下8口多單(這樣可以省點手續費)
另外原始文章中我舉的問題2不知明大是否遇過,或如何解決
我實在想不出合理的解釋原因
再次感謝 明大:
測試結果的確可以平部分單
但平完部分倉位之後的單
程式去抓抓不到單
出現 error code: 4099ERR_END_OF_FILE (4099)
是我的orderclose語法有問題嗎?
或是要如何才能避開此問題?
while(市場倉位 > 訊號倉位)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
{
if(需要倉位>=OrderLots()) send_lot=OrderLots();
else send_lot=abs_pos;
if(OrderType()==OP_BUY && OrderComment()==signal)
{OrderClose(OrderTicket(),send_lot,Bid,slip,Blue);}
cnt++;
市場倉位=市場倉位 - send_lot;
}
懇求賜教 double longpos,shortpos;
//#property show_confirm
void Wait()
{
while( IsTradeContextBusy() )
{
Sleep(5);
}
}
//+------------------------------------------------------------------+
//| script "close first market order if it is first in the list" |
//+------------------------------------------------------------------+
double NetPos()
{
int total = OrdersTotal();
static double current_Pos,BuyPos,SelPos;
current_Pos=0;BuyPos=0;SelPos=0;
for(int cnt=0; cnt<total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
if(OrderSymbol() == Symbol()&&OrderType()==OP_BUY)
BuyPos=BuyPos+OrderLots();
if(OrderSymbol() == Symbol()&&OrderType()==OP_SELL)
SelPos=SelPos+OrderLots();
}
current_Pos=BuyPos-SelPos;
longpos=BuyPos;
shortpos=SelPos;
return (current_Pos);
}
int start()
{
bool result;
double price;
int BuyTick,SellTick,cnt1,cnt2,total;
//----
double net = NetPos();
if( net > 0)
{
while(shortpos>0)
{
total = OrdersTotal();
for (cnt1=0;cnt1<total;cnt1++)
{ OrderSelect(cnt1, SELECT_BY_POS);
if (OrderSymbol()==Symbol()&&OrderType()==OP_BUY)
{
BuyTick=OrderTicket();
for (cnt2=0;cnt2<total;cnt2++)
{ OrderSelect(cnt2, SELECT_BY_POS);
if (OrderSymbol()==Symbol()&&OrderType()==OP_SELL)
{
SellTick=OrderTicket();
Wait();
RefreshRates();
OrderCloseBy(BuyTick,SellTick);
}
}
}
}
net = NetPos();
}
} else
if( net < 0 )
{
while(longpos>0)
{
total = OrdersTotal();
for (cnt1=0;cnt1<total;cnt1++)
{ OrderSelect(cnt1, SELECT_BY_POS);
if (OrderSymbol()==Symbol()&&OrderType()==OP_SELL)
{
SellTick=OrderTicket();
for (cnt2=0;cnt2<total;cnt2++)
{ OrderSelect(cnt2, SELECT_BY_POS);
if (OrderSymbol()==Symbol()&&OrderType()==OP_BUY)
{
BuyTick=OrderTicket();
Wait();
RefreshRates();
OrderCloseBy(SellTick,BuyTick);
}
}
}
}
net = NetPos();
}
}else
return(0);
}
從這個範例,你所要認知的是:
1、多單 10 口
2、建立 空單2口
3、此時 淨多單8口
4、採用 OrderCloseBy(SellTick,BuyTick); 去沖銷
反之,淨空單 8口
採用 OrderCloseBy(BuyTick,SellTick); 本帖最後由 wprstyle 於 12-4-3 20:13 編輯
明大:
原來我一直走錯路
感謝賜教
若延申您舉的例子,
10->8->0
多單十口 => 10口手續費
空單兩口 => 2口手續費
多空互抵
最後多單八口全平
共12口手續費
有無可能
多單十口 => 10口手續費
平其中兩口
最後平剩下八口
共10口手續費
因為手續費還蠻貴的
希望省一點手續費
謝謝
MT4 交易 並沒有手續費
觀念上 有偏差
明大:
多謝指正, 豁然開朗
再次感謝
頁:
[1]