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

 
sss2019:


ありがとうございます。つまり、期間M1は値1に対応し、期間M5は値5に対応するので、期間H1は値60に対応し、期間H4は値240に対応するということですよね?


はい、その通りです。

PERIOD_M1 1 1 минута
PERIOD_M5 5 5 минут
PERIOD_M15 15 15 минут
PERIOD_M30 30 30 минут
PERIOD_H1 60 1 час
PERIOD_H4 240 4 часа
PERIOD_D1 1440 1 день
PERIOD_W1 10080 1 неделя
PERIOD_MN1 43200 1 месяц
0 (ноль) 0 Период текущего графика

 

こんにちは。

よろしくお願いします。簡単なインジケータを書こうとしているのですが、なぜか空値が出てしまいます。

この場所のどこかに間違いがあるような気がします。

ExtVolumesBuffer[i]=dVolume;


なぜなら、ExtVolumesBuffer 配列のこの操作のフィールドは何も変更されないからです。

どこかで間違えたというのはわかるのですが、どこが間違えたのかがわからないのです。

ありがとうございました。

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_buffers 1
#property indicator_color1 Black
//---- indicator buffers
double ExtVolumesBuffer[];
double emaExtVolumesBuffer[];

//+------------------------------------------------------------------+
int init()
{
//---- indicator buffers mapping
SetIndexBuffer(0,emaExtVolumesBuffer);
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
//---- sets default precision format for indicators visualization
IndicatorDigits(0);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("emaVolumes");
SetIndexLabel(0,"emaVolumes");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int i,nLimit,nCountedBars;
//---- bars count that does not changed after last indicator launch.
nCountedBars=IndicatorCounted();
//---- last counted bar will be recounted
if(nCountedBars>0) nCountedBars--;
nLimit=Bars-nCountedBars;
//----
for(i=0; i<nLimit; i++)
{
double dVolume=Volume[i];
ExtVolumesBuffer[i]=dVolume;
emaExtVolumesBuffer[i]=iMAOnArray(ExtVolumesBuffer,0,10,0,MODE_EMA,i);

Print(Volume[i],Volume[i+1],Volume[i+2],Volume[i+3]);
Print(ExtVolumesBuffer[i],ExtVolumesBuffer[i+1],ExtVolumesBuffer[i+2],ExtVolumesBuffer[i+3]);
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
 
sss2019:


ありがとうございます。つまり、期間M1は値1に対応し、期間M5は値5に対応するので、期間H1は60に、期間H4は240に対応することがわかりますよね?

期間M1が選択されたときケース1、期間M15が選択されたときケース15という構成が必要なのですが、どうしたらいいでしょうか?それとも、ケース1、ケース2、ケース3の順番で行う必要があるのでしょうか?

int CurrentGrafPeriod ()
{
   
int Ba;
int GrafPeriod = Period();    
  switch(GrafPeriod)
    {
 
    case 1 :  Ba = 60; break;
    case 5 :  Ba = 12; break;
    case 15 : Ba = 4;  break;
    case 30 : Ba = 2;  break;
    case 60 : Ba = 1;  break;
    }
return(Ba);
}

if(CurrentGrafPeriod () == 1){ваше исполнение}
if(CurrentGrafPeriod () == 5){ваше исполнение}
и так далее...
が、これは仮説であって、うまくいくかどうかはわかりません......。
 
sss2019:


ありがとうございます。つまり、期間M1は値1に対応し、期間M5は値5に対応するので、期間H1は値60に対応し、期間H4は値240に対応するということですよね?

期間M1をケース1としたとき、期間M15をケース15としたとき、という構成にしたい。この方法でうまくいくのでしょうか、それともケース1ケース2ケース3-と順番に作る必要があるのでしょうか?


まず、1、5などの数字ではなく、PERIOD_M1、PERIOD_M5など、名前付きの定数を 使ったほうがよいでしょう。

第二に、あなたの例には誤りがあります。Ba 変数は常に値1をとります。

 
sss2019:


ありがとうございます。つまり、期間M1は値1に対応し、期間M5は値5に対応するので、期間H1は値60に対応し、期間H4は値240に対応するということですよね?

期間M1をケース1としたとき、期間M15をケース15としたとき、という構成にしたい。うまくいくでしょうか、それともケース1ケース2ケース3の順番で作る必要があるのでしょうか?

1) 各行で改行を入れるとうまくいきます。

2) 1, 5, 15 の代わりに、PERIOD_M1, PERIOD_M5, PERIOD_M15 などとするとよいでしょう。

 

こんにちは、取引ロボットが50回に1回程度、利益に達してもポジションを閉じないという事実に気づきました。その後、ペンダントなどすべてを閉じて、再度セットアップする必要があります。クローズしないことで、注文の混乱やドローダウンが発生します。

時々、takeprofitで間違いなく閉じられた注文が、orderclosepriceが0に等しいことが判明することを想像できますか!!!!!!!

ここで、スクリーンショットを見てください。下から5行目です。従来は49と呼ばれていた注文が、TakeProfitでクローズしています。そして、下から9行目には オーダークローズプリッシュはゼロに等しい!!!!

 
PapaYozh:

第二に、あなたの例には誤りがあります。変数Baは 常に値1をとります。

その理由は?ブレークが足りないのでしょうか?
 
dkfl.zrjdktdbx:

こんにちは、取引ロボットが50回に1回程度、利益に達してもポジションを閉じないという事実に気づきました。その後、未決済の注文も含めてすべてを終了し、再度設定する必要があります。クローズしないことで、注文の混乱やドローダウンが発生します。

時々、takeprofitで間違いなく閉じられた注文が、orderclosepriceが0に等しいことが判明することを想像できますか!!!!!!!

下のスクリーンショットでわかるように、ここは5行目です。49という名目の注文がTakeProfitでクローズしています。そして、下から9行目のOrderclosepricheはゼロに等しい!!!!


これは、orderclossepricheではなく、Clowes Price - 注文の終値 です。

Expert Advisor のコードを修正する必要があります。戦っているのは自分だ。

 

なるほど。特に複雑なコードがあるわけでもないのに...。 これから投稿します。

注文するときは、wremjapomnimで時間を節約しています。 どの注文もcurrentprofitで決済されると同時に、すべての注文を削除し、再びwremjapomnim変数に時間を記憶し、設定するのです。

for ( i=OrdersHistoryTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
Alert( "wremjapomnim " ,wremjapomnim, "  OrderCloseTime(        )   ",  OrderCloseTime( ),  " ",i , " OrderTakeProfit( ) " ,OrderTakeProfit( ),
  " OrderClosePrice(    )  ",OrderClosePrice(   ) );
if ( OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<2*Point)
   &&wremjapomnim<OrderCloseTime(       )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)>-2*Point)&&wremjapomnim<OrderCloseTime(       )){C=0;A=1 ;  Alert("C",C,"A",A);
   for ( int ii=OrdersTotal();ii>0;ii--){ OrderSelect(ii-1,SELECT_BY_POS );
   if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()){ 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); stsBUY=0;stsSELL=0;
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }     }              }
   
                                                      } 
 
 
melnikas:

こんにちは。

よろしくお願いします。簡単なインジケータを書こうとしているのですが、なぜか空値が出てしまいます。

この場所のどこかに間違いがあるような気がします。


なぜなら、ExtVolumesBuffer 配列のこの操作のフィールドは何も変更されないからです。

どこかで間違えたというのはわかるのですが、どこが間違えたのかがわからないのです。

ありがとうございました。


私の場合は、そんなに複雑なんですか?