MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 182 1...175176177178179180181182183184185186187188189...1953 新しいコメント Evgenii 2017.04.21 19:54 #1811 Artyom Trishkin: そして、あなたはコードの一部を示していません。なぜ例を示しているのか、はっきりしません。struct p{double trailingProfit;int orders[10];bool flagOpen;// флаг , указывающий на открытость позиции//тут еще куча связанных параметров};p order[];int OrderN=-1;int OnInit() { ArrayResize(pair,1,1000); return(INIT_SUCCEEDED); }void openOrder(price){ OrderN++; int t; ArrayResize(orders,order+1); t=OrderSend(Symbol(),OP_BUYSTOP,2,(NormalizeDouble(price,Digits)),3,0,0,"pair",MAGICN,0,Blue); if(t==0) Print("не удалось выставить ордер BUYSTOP ", price); for(intj=0,j<10,++j){ if(orders[OrderN].orders==0) orders[OrderN].orders=t; break; } orders[OrderN].flagOpen=1;}//...... тут идет обработка позиций...void massCut(){// нужна вот такая функция} EAが長時間動作していると、配列が大きくなりすぎて処理に支障をきたすので、配列を減らす必要がある。古いクローズド・オーダーはすべて先頭にあり、最初に見つかったオープン・オーダー以降はすべて残しておく必要があります。 Any questions from newcomers [アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. KARAUL!!!!あと4時間45分!!!! Artyom Trishkin 2017.04.21 20:08 #1812 Evgenii: ... EAを長時間稼働させていると、アレイが大きくなりすぎて処理できなくなるので、アレイを縮小する必要がある。古いクローズドオーダはすべて先頭にあり、最初に見つかったオープンオーダ以降はすべて残します。EAを再起動すると、構造体の配列はどうなるのでしょうか? Evgenii 2017.04.21 20:14 #1813 Artyom Trishkin:EAを再起動すると、構造体配列はどうなるのでしょうか? を実行すると、配列がクラッシュしてしまうという問題があり、この問題は解決されていません。 Artyom Trishkin 2017.04.21 21:09 #1814 Evgenii: 配列は削除されます。この問題は解決されていません。そこにそして、これはそもそも検討すべきことだったのです。結論は明らかで、配列をゼロにして、現在の注文とポジションの状態を再入力しなければならない。しかし、これは口座内の注文や ポジションの量の変化を捉えた場合にのみ行うべきものです。常に現在のオーダーとポジションの状態だけが手元にあり、存在しないオーダーやポジションをわざわざ配列から排除する必要はない。そして、注文/ポジションのリストは、完全に、または履歴の一定期間、特定の場合のみ、つまりアカウント内の注文/ポジションの数が変わったときにスクロールする必要があります。 Pavel Verveyko 2017.04.21 21:31 #1815 Alexey Viktorov: なぜそのような倒錯が必要なのか? 再初期化のたびにonInitがスピンしないようにし、静的配列を 1つのインスタンスに縮小する...場所によっては2回書かれているため、一般にこれはリソースの最適化である...このままにしておきます、今のところシンプルなので Pavel Verveyko 2017.04.21 21:32 #1816 LRA: サイズを指定せずにグローバル配列を宣言した場合。関数は ArrayResize でサイズを設定します。そして、グローバルに可視化され、OnInitが解除される...。 配列は静的で、明確に定義された値を持つので、別に初期化する意味はありません( Alexey Viktorov 2017.04.22 07:30 #1817 Money_Maker: 再初期化のたびにOnInitがスピンするのを防ぎ、静的配列を 1インスタンスに減らすためです。...今のままにしておきます。 再初期化のたびにOnOnit()でループしないように、非初期化の理由UninitializeReason()をチェックするだけで、それ以上は何も出てきませんね。静的配列を減らすとはどういうことですか?まあ、一般的には、よく分かっているのでしょう。 Andrey Dik 2017.04.22 08:59 #1818 MT4テスターでは、手数料は考慮されないのですか? Alexey Viktorov 2017.04.22 11:46 #1819 Andrey Dik: MT4テスターでは、手数料は考慮されないのですか? 手数料が発生するアカウントに接続していないと考慮されないようです。 виталик 2017.04.22 19:41 #1820 関数Print() に関する質問です。EAでPrint()でデータに日付(日)を加えて表示させるにはどうしたらいいですか?初心者にわかりやすく、実験のために作り直したコードを入れて、あらかじめ "pivot "をインデュークしておくcbs!コードそのものです。PivotsDaily v2.mq4#property indicator_chart_window#プロパティ indicator_buffers 3#property indicator_color1 ライム#プロパティ indicator_color2 ブルー#property indicator_color3 レッド//---- 入力パラメータextern inttern CountBars=300。//---- バッファdouble PBuffer[];double S1Buffer[];double R1Buffer[];文字列 Pivot="P", Sup1="S 1", Res1="R 1";int fontsize=10;double P,S1,R1,S2,R2,S3,R3;double LastHigh,LastLow,x;//+------------------------------------------------------------------+//| カストマーインジケーター初期化機能//+------------------------------------------------------------------+int deinit(){ObjectDelete("Pivot")。ObjectDelete("S1")。ObjectDelete("R1")。return(0)です。}//+------------------------------------------------------------------+//| カスタムインジケータ初期化関数//+------------------------------------------------------------------+int init(){文字列のshort_name。IndicatorBuffers(7)です。//---- インジケータラインSetIndexStyle(0,DRAW_ARROW,2,1,Lime)を設定します。SetIndexArrow(0,158)を設定。SetIndexStyle(1,DRAW_ARROW,2,1,Blue)を設定します。SetIndexArrow(1,158)。SetIndexStyle(2,DRAW_ARROW,2,1,Red)を設定します。SetIndexArrow(2,158)。SetIndexBuffer(0,PBuffer)を設定します。SetIndexBuffer(1,S1Buffer)を設定します。SetIndexBuffer(2,R1Buffer)を設定します。//---- DataWindowとインジケータサブウィンドウのラベル名short_name="Pivot"。IndicatorShortName(short_name)。SetIndexLabel(0,short_name)を設定する。short_name="R1"。IndicatorShortName(short_name)。SetIndexLabel(2,short_name)を設定します。short_name="S1"。IndicatorShortName(short_name)。SetIndexLabel(1,short_name)を設定します。SetIndexDrawBegin(0,6)を設定します。//----return(0)です。}//+------------------------------------------------------------------+//| カスタムインジケータ反復関数//+------------------------------------------------------------------+int start(){int counted_bars=IndicatorCounted();int limit, i;//---- インジケータ計算if (counted_bars==0){x=Period()です。if (x>CountBars) return(-1);ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);ObjectSetText("Pivot", " Pivot",10, "Arial",Lime);ObjectCreate("S1", OBJ_TEXT, 0, 0, 0);ObjectSetText("S1", " S1",10, "Arial",Blue);ObjectCreate("R1", OBJ_TEXT, 0, 0, 0);ObjectSetText("R1", " R1",10, "Arial",Red);}if(counted_bars<0) return(-1);limit=(Bars-counted_bars)-1。for (i=limit; i>=0;i--){if (TimeDayOfWeek(時間[i]) != 0){if (High[i+1]>LastHigh) LastHigh=High[i+1];if (Low[i+1]<LastLow) LastLow=Low[i+1];}もしTimeDay(Time[i])!=TimeDay(Time[i+1]) && TimeDayOfWeek(Time[i])!=0){P=Close[i+1]とする。R1 = LastLow;S1 = LastHigh;S2=High[i]-Low[i]とする。S3=High[i]-Open[i+1];if(S3==0){R2 = S3;}。else {R2 = S2/S3;}。Print("R2 ",R2); // <= プリンタにデータを加えて日付を印刷させるにはどうしたらいいですか?LastLow=Open[i]; LastHigh=Open[i];ObjectMove("Pivot", 0, Time[i],P);ObjectMove("S1", 0, Time[i],S1);ObjectMove("R1", 0, Time[i],R1);}PBuffer[i]=P;S1Buffer[i]=S1;R1Buffer[i]=R1;}//----return(0)です。} Any questions from newcomers How to change this Pivot Point Indicator with 1...175176177178179180181182183184185186187188189...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そして、あなたはコードの一部を示していません。なぜ例を示しているのか、はっきりしません。
struct p{
double trailingProfit;
int orders[10];
bool flagOpen;// флаг , указывающий на открытость позиции
//тут еще куча связанных параметров
};
p order[];
int OrderN=-1;
int OnInit()
{
ArrayResize(pair,1,1000);
return(INIT_SUCCEEDED);
}
void openOrder(price){
OrderN++;
int t;
ArrayResize(orders,order+1);
t=OrderSend(Symbol(),OP_BUYSTOP,2,(NormalizeDouble(price,Digits)),3,0,0,"pair",MAGICN,0,Blue);
if(t==0) Print("не удалось выставить ордер BUYSTOP ", price);
for(intj=0,j<10,++j){
if(orders[OrderN].orders==0) orders[OrderN].orders=t;
break;
}
orders[OrderN].flagOpen=1;
}
//...... тут идет обработка позиций...
void massCut(){
// нужна вот такая функция
}
EAを再起動すると、構造体の配列はどうなるのでしょうか?
EAを再起動すると、構造体配列はどうなるのでしょうか?
配列は削除されます。この問題は解決されていません。
そこにそして、これはそもそも検討すべきことだったのです。
結論は明らかで、配列をゼロにして、現在の注文とポジションの状態を再入力しなければならない。しかし、これは口座内の注文や ポジションの量の変化を捉えた場合にのみ行うべきものです。
常に現在のオーダーとポジションの状態だけが手元にあり、存在しないオーダーやポジションをわざわざ配列から排除する必要はない。そして、注文/ポジションのリストは、完全に、または履歴の一定期間、特定の場合のみ、つまりアカウント内の注文/ポジションの数が変わったときにスクロールする必要があります。
なぜそのような倒錯が必要なのか?
再初期化のたびにonInitがスピンしないようにし、静的配列を 1つのインスタンスに縮小する...場所によっては2回書かれているため、一般にこれはリソースの最適化である
...このままにしておきます、今のところシンプルなので
サイズを指定せずにグローバル配列を宣言した場合。関数は ArrayResize でサイズを設定します。そして、グローバルに可視化され、OnInitが解除される...。
配列は静的で、明確に定義された値を持つので、別に初期化する意味はありません(
再初期化のたびにOnInitがスピンするのを防ぎ、静的配列を 1インスタンスに減らすためです。
...今のままにしておきます。
MT4テスターでは、手数料は考慮されないのですか?
関数Print() に関する質問です。EAでPrint()でデータに日付(日)を加えて表示させるにはどうしたらいいですか?初心者にわかりやすく、実験のために作り直したコードを入れて、あらかじめ "pivot "をインデュークしておくcbs!
コードそのものです。PivotsDaily v2.mq4
#property indicator_chart_window
#プロパティ indicator_buffers 3
#property indicator_color1 ライム
#プロパティ indicator_color2 ブルー
#property indicator_color3 レッド
//---- 入力パラメータ
extern inttern CountBars=300。
//---- バッファ
double PBuffer[];
double S1Buffer[];
double R1Buffer[];
文字列 Pivot="P", Sup1="S 1", Res1="R 1";
int fontsize=10;
double P,S1,R1,S2,R2,S3,R3;
double LastHigh,LastLow,x;
//+------------------------------------------------------------------+
//| カストマーインジケーター初期化機能
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("Pivot")。
ObjectDelete("S1")。
ObjectDelete("R1")。
return(0)です。
}
//+------------------------------------------------------------------+
//| カスタムインジケータ初期化関数
//+------------------------------------------------------------------+
int init()
{
文字列のshort_name。
IndicatorBuffers(7)です。
//---- インジケータライン
SetIndexStyle(0,DRAW_ARROW,2,1,Lime)を設定します。
SetIndexArrow(0,158)を設定。
SetIndexStyle(1,DRAW_ARROW,2,1,Blue)を設定します。
SetIndexArrow(1,158)。
SetIndexStyle(2,DRAW_ARROW,2,1,Red)を設定します。
SetIndexArrow(2,158)。
SetIndexBuffer(0,PBuffer)を設定します。
SetIndexBuffer(1,S1Buffer)を設定します。
SetIndexBuffer(2,R1Buffer)を設定します。
//---- DataWindowとインジケータサブウィンドウのラベル名
short_name="Pivot"。
IndicatorShortName(short_name)。
SetIndexLabel(0,short_name)を設定する。
short_name="R1"。
IndicatorShortName(short_name)。
SetIndexLabel(2,short_name)を設定します。
short_name="S1"。
IndicatorShortName(short_name)。
SetIndexLabel(1,short_name)を設定します。
SetIndexDrawBegin(0,6)を設定します。
//----
return(0)です。
}
//+------------------------------------------------------------------+
//| カスタムインジケータ反復関数
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int limit, i;
//---- インジケータ計算
if (counted_bars==0)
{
x=Period()です。
if (x>CountBars) return(-1);
ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);
ObjectSetText("Pivot", " Pivot",10, "Arial",Lime);
ObjectCreate("S1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("S1", " S1",10, "Arial",Blue);
ObjectCreate("R1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("R1", " R1",10, "Arial",Red);
}
if(counted_bars<0) return(-1);
limit=(Bars-counted_bars)-1。
for (i=limit; i>=0;i--)
{
if (TimeDayOfWeek(時間[i]) != 0)
{
if (High[i+1]>LastHigh) LastHigh=High[i+1];
if (Low[i+1]<LastLow) LastLow=Low[i+1];
}
もし
TimeDay(Time[i])!=TimeDay(Time[i+1]) && TimeDayOfWeek(Time[i])!=0
)
{
P=Close[i+1]とする。
R1 = LastLow;
S1 = LastHigh;
S2=High[i]-Low[i]とする。
S3=High[i]-Open[i+1];
if(S3==0)
{R2 = S3;}。else {R2 = S2/S3;}。
Print("R2 ",R2); // <= プリンタにデータを加えて日付を印刷させるにはどうしたらいいですか?
LastLow=Open[i]; LastHigh=Open[i];
ObjectMove("Pivot", 0, Time[i],P);
ObjectMove("S1", 0, Time[i],S1);
ObjectMove("R1", 0, Time[i],R1);
}
PBuffer[i]=P;
S1Buffer[i]=S1;
R1Buffer[i]=R1;
}
//----
return(0)です。
}