MACDサンプルコードを見てください。
内部で使用するMACD指標のために取得した変数を、Ichmoku指標の値を取得するように変更します。
小さな変更を加えてから、構文が正しいことを確認するためにコードをコンプリートしてください。
edit - また、Ichmoku Indicatorの使用方法はこちら です。
OK MACDのサンプルを元に作り直しましたが、以下のようなエラーがありました。
'\end_of_program' - ending bracket '}' expected C:\Program Files (x86)♪MetaTrader 4experts ♪ICHIMOKU.mq4 (80, 13)
'Ⅾend_of_program' - unbalanced left parenthesis C:\Program Files (x86)\MetaTrader 4experts PhICHIMOKU.mq4 (80, 13)
これは新バージョンです。
//+------------------------------------------------------------------+
| | ICHIMOKU.mq4
//| Copyright © 2012, MetaQuotes Software Corp.|
//|http://www.metaquotes.net|
//+------------------------------------------------------------------+
#property copyright "著作権 © 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern double TakeProfit = 50;
extern double Lots = 0.1;
extern double TrailingStop = 30;
extern double Tenkan = 9;
extern double Kijun = 26;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int start()
{
double tenkan_sen;
double kijun_sen;
int cnt, ticket, total;
//----
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(テイクプロフィット<10)
{
Print("TakeProfitが10未満");
return(0); // TakeProfitのチェック
//----
total=OrdersTotal();
if(total<1)
{
// 未決済注文を確認できない
if(AccountFreeMargin()<(1000*Lots))
{
Print("資金がありません。フリーマージン = ", AccountFreeMargin());
return(0);
// ロングポジション(買い)の可能性チェック
if(tenkan_sen>kijun_sen)とする。
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "ichimoku",16384,0,Green)。
if(チケット>0)
{
if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))Print("買い注文開始:",OrderOpenPrice()).Print("BUY order opened : ",OrderOpenPrice());
else Print("BUY注文の開始エラー : ",GetLastError());
return(0);
// 正しく市場に参入することは重要です。
// しかし、正しく退場することはもっと重要です...
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // 開いたポジションをチェック)
OrderSymbol()==Symbol()) // シンボルをチェック
{
if(OrderType()==OP_BUY)の場合 // ロングポジションがオープン
{
// 決済すべきか?
if((tenkan_sen<kijun_sen))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // クローズポジション
return(0); // 終了
// トレーリングストップをチェック
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(オーダーストップ・ロス()<買値-売値*トレイリングストップ)
{
オーダーモディファイ(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
}
}
return(0);
}
この時点で「あなたの」コードは.. .
} else Print("Error opening BUY order : ",GetLastError()); return(0); // <------ here ! ! ! // it is important to enter the market correctly, // but it is more important to exit it correctly... for(cnt=0;cnt<total;cnt++) {
......ここに マークされている!!!の ように、注文を出すところから閉じるところに切り替わったわけですが、購入する部分の閉じ中括弧(})が 2つほど抜けています。
OK ありがとうございます。この変更で'end_of_program' - ending bracket '}' expected C:\Program Files (x86)♪MetaTrader 4experts♪ICHIMOKU.mq4 (80, 13)♪が削除されました。
<========= と表示されています。
// ロングポジション(BUY)の可能性を確認する。
if(tenkanan_sen>kijun_sen)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "ichimoku",16384,0,Green).と表示されます。
if(チケット>0)
} <=======
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY order opened : ",OrderOpenPrice());
else Print("Error opening BUY order : ",GetLastError());
return(0);
// 市場に正しく参入することは重要です。
// しかし、正しく終了することはもっと重要です...。
しかし、それはそこにあるべきかのように思われません。
このラインには、余剰のオープニングブラケットがありますね.
if ( ( tenkan_sen<kijun_sen ) // <-- surplus (
これらの変数を初期化しても、値を与えてはいけない.. .
if ( tenkan_sen > kijun_sen )
そのため、テストは常に偽になります。 このEAが注文を出すことはありません。
あなたのコードをインデントしてコンパイルしたバージョンで.. .
//+------------------------------------------------------------------+ //| ICHIMOKU.mq4 | //| Copyright © 2012, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2012, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double Tenkan = 9; extern double Kijun = 26; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int start() { double tenkan_sen; double kijun_sen; int cnt, ticket, total; //---- if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit<10) { Print("TakeProfit less than 10"); return(0); // check TakeProfit } //---- total=OrdersTotal(); if(total<1) { // no opened orders identified if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // check for long position (BUY) possibility if(tenkan_sen>kijun_sen) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"ichimoku",16384,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(0); } // added by RaptorUK } // added by RaptorUK // it is important to enter the market correctly, // but it is more important to exit it correctly... for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { if(OrderType()==OP_BUY) // long position is opened { // should it be closed? if(tenkan_sen<kijun_sen) // removed surplus ( RaptorUK { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position return(0); // exit } // check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); return(0); } } } } } } return(0); }

- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
天底線>起点線(天底線が起点線より上にある時)で自動的に1単位買い、天底線が起点線より下になったら売るというエキスパートアドバイザーを作ろうと思っています。
全くの初心者で、昨日からサンプルをつなぎ合わせたりして始めてみました。
以下はその結果ですが、おそらくたわごとであることは承知しています。
コンパイルしようとすると、int start()の行(ナビゲータの "trade "スクリプトからコピー)で古典的な"'(' - function definition unexpected "が表示されます。
どうすればこのアイデアを実現できるのか、ご教示くださいますようお願いいたします。
#プロパティ copyright"#copyright#"
#プロパティのリンク "#link#"
extern double ロット = 0.1;
extern double 天秤 = 9;
extern double Kijun = 26;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
Bars<=Tenkan, Bars<=Kijun;
//----
if(Bars<=Tenkan>Bars<=Kijun))とする。
{
Print ("天底線が機上線より大きい");
return(0);
//----
//+------------------------------------------------------------------+
//| スクリプト "全財産取引"
//+------------------------------------------------------------------+
int start()
{
//----
if(MessageBox("Do you really want to BUY 1.00 "+Symbol()+" at ASK price? ",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(1);
//----
int ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0, "expert comment",255,0,CLR_NONE);
if(ticket<1)
{
int error=GetLastError();
Print("エラー=",ErrorDescription(error));
を返します。
}
//----
OrderPrint()を実行します。
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
Bars<=Tenkan, Bars<=Kijun;
//----
if(Bars<=Tenkan<Bars<=Kijun))とする。
{
Print ("天秤棒が機順線より小さい");
return(0);
//----
int start()
{
//----
if(MessageBox("Do you really want to SELL 1.00 "+Symbol()+" at Bid price? ",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(1);
//----
int ticket=OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0, "expert comment",255,0,CLR_NONE);
if(ticket<1)
{
int error=GetLastError();
Print("エラー=",ErrorDescription(error));
を返します。
}
//----
OrderPrint()を実行します。
return(0);
}
//+------------------------------------------------------------------+