いちもくせんりゃく

 

天底線>起点線(天底線が起点線より上にある時)で自動的に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);
}
//+------------------------------------------------------------------+

 

MACDサンプルコードを見てください。

内部で使用するMACD指標のために取得した変数を、Ichmoku指標の値を取得するように変更します。

小さな変更を加えてから、構文が正しいことを確認するためにコードをコンプリートしてください。

edit - また、Ichmoku Indicatorの使用方法はこちら です。

 

ToBaさん、こんにちは。

3つありますね。

1 x init, 1 x deinit + 1 x start だけであるべきです。

start関数は、市場の動き(またはティック)を処理するスクリプトのメインボディです。

また、すべての波括弧が適切に閉じられ、すべての変数が宣言されていることを確認してください。

 
Ickyrus:

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);
   }
 
ありがとうございました :)
理由: