前回の記事の最後の方で「あとニャン吉Repeatでは各通貨ペア1チャートを除いてトレール処理命令文を削除しましたが、更に軽量化を狙って売り指値のないチャートでは売り処理命令文も削りました」と記載しましたが、そのコードが載っていなかったので貼ります。
「ニャン吉Repeat2」ではトレール決済を外していますが、売値買値両方で指値が可能です。
「ニャン吉Repeat3」では更に売値の命令文と設定欄を消してあります。買いの指値だけが可能です。
但しこれらEAもあくまでニャン吉が自分用として使う前提で制作しています。
ご利用は自己責任のうえLive口座での本稼働は避けるようにお願いします。
これらの補助EAは5月27日公開の「ニャン吉Repeat」がないと決済をしないまま放置してしまうので意味がありません。
必ず最初に刺さる指値の設定には「ニャン吉Repeat」を用い、他チャートへの設定にこれら「ニャン吉Repeat2」と「ニャン吉Repeat3」を適宜用いてください。
最初に刺さる指値に「ニャン吉Repeat」を用いていないと、ニャン吉Repeatが刺さるまでの間トレール処理がされませんのでご注意ください。
全ての同一通貨ペアチャートに「ニャン吉Repeat」を使うと命令のバッティングが起こりますし、売指値を入れないつもりで設定欄に「0」と記載してしまうと逆に制限なく常に売指値を入れるようになってしまいます。
不具合回避策として他チャートには必ず該当命令文が削除された補助EAを適用してください。
//+------------------------------------------------------------------+
//| ニャン吉Repeat2 |
//| 商用利用及び再配布を禁じます,c2021.5.27,ニャン吉ちゃんねる|
//| https://ニャン吉ちゃんねる.com |
//| (楽天MT4を前提とした設定内容です) |
//+------------------------------------------------------------------+
#property copyright "商用利用及び再配布を禁じます,c2021.5.27,ニャン吉ちゃんねる"
#property link "https://ニャン吉ちゃんねる.com"
#property description "(楽天MT4を前提とした設定内容です)"
#property strict
input int Magic =11;//チャート毎に別ナンバー割り振る(0は避ける)
input double Lot =0.01;//ロット(ロット数よりも通貨ペアを追加してポジション数増を推奨)
input double Kagen =120;//売り指値(指値を置きたくない場合には過去値幅外の数値を入力)
input double Jougen =105;//買い指値
input int MaxSpread =30;//スプレッドによるエントリー制限
input int MaxSlippage =10;//スリッページによるエントリー制限
double TakeProfit =0;
//エントリーカウント
int CurrentOrder()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if(OrderType()==OP_BUY) {
cnt++;
}
if(OrderType()==OP_SELL){
cnt++;
}
}
return(cnt);
}
void OnTick(void)
{
int ticket,total;
if(Bars<100)
{
Print("bars less than 100");
return;
}
total=OrdersTotal();
if(CurrentOrder()<1)
{
if(AccountFreeMargin()<(1000*Lot))
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return;
}
// 買エントリー処理
if(Ask<Jougen && MarketInfo(Symbol(),MODE_SPREAD)<MaxSpread )
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,MaxSlippage,0,0,NULL,Magic,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
else
Print("Error opening BUY order : ",GetLastError());
return;
}
// 売エントリー処理
if(Bid>Kagen && MarketInfo(Symbol(),MODE_SPREAD)<MaxSpread )
{
ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,MaxSlippage,0,0,NULL,Magic,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
else
Print("Error opening SELL order : ",GetLastError());
}
return;
}
}
//+------------------------------------------------------------------+
//| ニャン吉Repeat3 |
//| 商用利用及び再配布を禁じます,c2021.5.27,ニャン吉ちゃんねる|
//| https://ニャン吉ちゃんねる.com |
//| (楽天MT4を前提とした設定内容です) |
//+------------------------------------------------------------------+
#property copyright "商用利用及び再配布を禁じます,c2021.5.27,ニャン吉ちゃんねる"
#property link "https://ニャン吉ちゃんねる.com"
#property description "(楽天MT4を前提とした設定内容です)"
#property strict
input int Magic =11;//チャート毎に別ナンバー割り振る(0は避ける)
input double Lot =0.01;//ロット(ロット数よりも通貨ペアを追加してポジション数増を推奨)
input double Jougen =105;//買い指値
input int MaxSpread =30;//スプレッドによるエントリー制限
input int MaxSlippage =10;//スリッページによるエントリー制限
double TakeProfit =0;
//エントリーカウント
int CurrentOrder()
{
int cnt=0;
for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if(OrderType()==OP_BUY) {
cnt++;
}
if(OrderType()==OP_SELL){
cnt++;
}
}
return(cnt);
}
void OnTick(void)
{
int ticket,total;
if(Bars<100)
{
Print("bars less than 100");
return;
}
total=OrdersTotal();
if(CurrentOrder()<1)
{
if(AccountFreeMargin()<(1000*Lot))
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return;
}
// 買エントリー処理
if(Ask<Jougen && MarketInfo(Symbol(),MODE_SPREAD)<MaxSpread )
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,MaxSlippage,0,0,NULL,Magic,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
else
Print("Error opening BUY order : ",GetLastError());
return;
}
return;
}
}