ナンピン倍率1.5倍、ナンピン幅50pips、利確10pips
の設定に対して、
[0.1, 0.15, 0.23, 0.35]
とナンピンが積み重なったポジションに対して設定した利確10pipsは所有するロット数ではなくポジション数の平均値になっています。
これをロット数に応じた利益幅に変更したいのですが、同様のスレッドを拝見しても解決方法が今一度わかりませんでした。
1.https://labo.gogojungle.co.jp/articles/1033
2.https://labo.gogojungle.co.jp/articles/859
下記EAつくーるから生成されたナンピン部分のコードになりますが、結果どのようなコードになれば実現できるのでしょうか?
//--------------------------------------------------------------------------------------------------------+
//ナンピン関数 |
// 処理:損益(pips単位)に応じてポジションの追加を行う |
// 引数:ナンピンを行うポジションのマジックナンバー |
// 戻り値:なし |
//--------------------------------------------------------------------------------------------------------+
extern int NanpinCount = 9;
extern int NanpinEntryPips = 50;
extern double NanpinLotsMult = 1.5;
extern int NanpinTP = 10;
extern int NanpinSL = 0;
void NanpinLogic(int magic){
double price, total, lots;
int count;
bool is_entry = true;
getNanpinInfo(magic, OP_BUY, price, count, total, lots);
if(price > 0){
if(NanpinClose(magic, OP_BUY, total) == true){
is_entry = false;
}
}
if(is_entry == true){
NanpinEntry(magic, OP_BUY, price, count, lots);
}
price = 0;
count = 0;
total = 0;
lots = 0;
is_entry = true;
getNanpinInfo(magic, OP_SELL, price, count, total, lots);
if(price > 0){
if(NanpinClose(magic, OP_SELL, total) == true){
is_entry = false;
}
}
if(is_entry == true){
NanpinEntry(magic, OP_SELL, price, count, lots);
}
}
//--------------------------------------------------------------------------------------------------------+
//ナンピンの状態を取得する |
// 処理:ナンピン中のポジション情報を取得する |
// 引数:マジックナンバー、ポジションの種別、最終エントリー時の価格、 |
// ナンピン数、合計損益、初期ロット |
// 戻り値:なし |
//--------------------------------------------------------------------------------------------------------+
void getNanpinInfo(int magic, int type, double &entry_price, int &count, double &total, double &lots){
datetime first_time = 0;
datetime last_time = 0;
for(int i = 0; i first_time){
if(OrderOpenPrice() entry_price && OrderType() == OP_SELL){
entry_price = OrderOpenPrice();
}
count++;
}
if(OrderType() == OP_BUY){
total += (Bid - OrderOpenPrice()) / Point / Mult;
}
else if(OrderType() == OP_SELL){
total += (OrderOpenPrice() - Ask) / Point / Mult;
}
}
}
//--------------------------------------------------------------------------------------------------------+
//ナンピン使用時の注文関数 |
// 処理:ナンピンのエントリー基準に達している場合は発注を行う |
// 引数:マジックナンバー、ポジションの種別、最終エントリー時の価格、ナンピン数、初期ロット |
// 戻り値:なし |
//--------------------------------------------------------------------------------------------------------+
void NanpinEntry(int magic, int type, double price, int count, double lot){
if(price == 0) return;
double entry_price = 0;
if(type == OP_BUY && count = (price + NanpinEntryPips * Point * Mult)){
entry_price = Bid;
}
if(entry_price == 0) return;
int starttime = GetTickCount();
while(true){
if(GetTickCount() - starttime > 10 * 1000){
Alert(“OrderSend timeout. Check the experts log.”);
break;
}
if(IsTradeAllowed() == true){
RefreshRates();
if(OrderSend(Symbol(), type, LotsCal(lot * MathPow(NanpinLotsMult, count + 1)), entry_price, Slippage * Mult, 0, 0, COMMENT, magic, 0, ArrowColor[type]) != -1){
break;
}
int err = GetLastError();
Print("[OrderSendError] : ", err, " ", ErrorDescription(err));
if(err == 129) break;
if(err == 130) break;
}
Sleep(100);
}
}
//--------------------------------------------------------------------------------------------------------+
//ナンピン使用時の決済関数 |
// 処理:ナンピン用のTP/SLに到達している場合ポジションを決済する |
// 引数:マジックナンバー、ポジションの種別、合計損益(pips単位) |
// 戻り値:決済した場合はtrue,その他はfalse |
//--------------------------------------------------------------------------------------------------------+
bool NanpinClose(int magic, int type, double total){
if((total = 0; i–){
if(OrderSelect(i, SELECT_BY_POS) == false) continue;
if(OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
if(OrderType() != type) continue;
RefreshRates();
if(OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, ArrowColor[type]) == true){
result = true;
continue;
}
int err = GetLastError();
Print("[OrderCloseError] : ", err, " ", ErrorDescription(err));
}
return(result);
}
検索結果がありません。 |
検索結果がありません。 |
誠に恐れ入りますが、EAつくーるで作成可能なロジックの
範囲外となりますため、お答えできかねます。
ナンピンが積み重なったポジションに対して ロット数に応じた利益幅に変更する機能
を検討事項に追加いたしました。
実装可能な場合は改めてご連絡いたします。
ご不便おかけいたしますが、今後とも何卒よろしくお願い申し上げます。