[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 197

 
CLAIN:

同志よ、助けてくれ...。簡単なコードを書いたのですが、コンパイル時に括弧のバランスが崩れていると言われました。

考え方は簡単で、MACDが7分以内に0を上回った(または下回った)場合、ポジションをオープンします。


この機能を確認する

void AnalyzeSignal(int signal) 
{ 
  if(signal == 100) 
  { 
    ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green); 
    if(ticket>0) 
    { 
      OrderSelect(ticket,SELECT_BY_TICKET); 
      Print("открылись на покупку по цене:" OrderOpenPrice()); 
    } 
    else 
    { 
      Print("открыться не удалось по причине:" GetLastError()); 
      return(0); 
    } 
  } 
  if(signal == -100) 
  { 
    ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green); 
    if(ticket>0) 
    { 
      OrderSelect(ticket,SELECT_BY_TICKET); 
      Print("открылись на продажу по цене:" OrderOpenPrice()); 
    } 
    else 
    { 
      Print("открыться не удалось по причине:" GetLastError()); 
      return(0); 
    } 
  } 
} 

//---- 
return(0); 
} 
 
CLAIN:
P.S.どうしたらこんなにきれいにスクリプトが描けるのでしょうか?

答えを書くときにSRCボタンがあります。

括弧については、私は閉じ括弧が何を指すかを指定する習慣があります

}//for

}// (シグナル...)

 
splxgf:

また、括弧については、閉じたものが何を指しているのかを指定する習慣があります

}//for

}// (シグナル...)


"to taste and color..." - しかし、この方法は、不必要な情報でコードをオーバーロードする+余計な行を書くのに時間がかかる+深いネストの問題を解決しない(レベルの番号付け?)

より良いコード構造 - 上の例のように

 

こんにちは、1つの注文を開いた後、同じローソク足で2つ目の注文を開くことができないように条件を記述する方法を教えてください。を書かせていただいています。

ったら&& CountOrder<2 && (BarLast>1 || BarLast==-1))
{
OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,0, "BUY: ",MagicL,0,Green");

}

どこ

// 証券の未決済注文の数を数える
int CountOrder=0;
for (int j=0; j<OrdersTotal(); j++)
if (OrderSelect(j,SELECT_BY_POS,MODE_TRADES)
if (OrderSymbol()==Symbol())CountOrder++;

// 最後に閉じたポジションの バー番号、またはまだ開いていない場合は-1
int BarLast=BarLastClosePose();


и

// 最後に閉じた位置のバー番号
int BarLastClosePose()
{
datetime t;
int i;

for (i=0; i<OrdersHistoryTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
//if (OrderMagicNumber()!=Magic) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderCloseTime()) t=OrderCloseTime();
}.
}

return (iBarShift(Symbol(),Period(),t,true));
}

 
ありがとうございます。
 
datetime LastTradeBar;

bool CanTrade = True;

int Start()

{ 

if (LastTradeBar==Time[0] ) CanTrade=False; else CanTrade=True; 

if (... && CountOrder<2 && (BarLast>1 || BarLast==-1))
{
if (CanTrade)

{

OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,0,"BUY: ",MagicL,0,Green);

LastTradeBar=Time[0];

} 

}
実は、ここでは論理変数は余計なものなのです。
 
Vinin:


この機能を確認する


Vinin、検証済み、この機能ではすべてうまくいっています...。return(0)は開始関数を指し、return'yに付いている括弧を除くと14個の括弧になる...。片道7本
 
CLAIN:

Vinin、検証済み、この機能ではすべてうまくいっています...。return(0)は開始関数を指し、return'yに付いている括弧を数えないと、14個の括弧になります...。片道7本。

各関数を別ファイルにコピーし、コンパイルの検証を行うことが有効です。

括弧が正しければ、スタートが終わり、MACDシグナルが始まる場所を示す。

int start() 
{ 
//---- 

int total,ticket; //объявил тотал и тикет 
int signal = signal_MACD(); //сигнал МАКД передает значение в сигнал
AnalyzeSignal(signal); //аналайз сигнал анализирует сигнал
int MACD[8] = {0,1,2,3,4,5,6,7}; //создал одномерный массив МАКД
MACD[0] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,7); 
///Бла-бла-бла
MACD[7] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,0); 

total = OrdersTotal(); //тотал считает ордера
///Тут большая жирная закрывающая скобка, если конечно следующая строчка это функция
int signal_MACD()
 
splxgf:

各関数を別ファイルにコピーし、コンパイルの検証を行うことが有効です。

括弧が正しい場合、スタートが終わり、MACDシグナルが始まる場所を示す。


ふむint signal_MACD()は確かに関数ですが...。しかし、なぜスタート関数の後ろでなければならないのでしょうか。ある関数はスタートの外側に、ある関数は内側に書かれているのか、正直言って理解できません...。何が違うのでしょうか?
 
正直なところ、ある機能を別の機能の中に記述することが可能なのかどうか、私はそのようなものに出会ったことがないのです。