さようならロボット - こんにちはマラスムス - ページ 4

 
Mislaid:

配列のout-of-boundsの制御は、コードに行表示があり、非常に便利です。昔は、ゼロで割って、好きなところを見てください、という感じでした。しかも、エラーが表示されないとなると、なおさらだった。

その方法を例として教えてください。この機能については、ドキュメントに何も書かれていませんでした。
 
Andrei01:
その方法を具体的に教えてください。ドキュメントには、この機能についての記述はありませんでした。

そのとおりです。今は何もしなくていいんです。エキスパート」タブを開いて、ログを読んでみてください。エラーが表示された場合は、その旨のメッセージが表示されます。ようなものです。

array out of range...... コードの行番号を示す。

 
Mislaid:

エキスパート」タブを開いて、ログを読んでみてください。

インジケーターやスクリプトにも使えますか?
 
Pavlick:

スクリプト/インジケーター名の最初の文字の大文字と小文字を変えてみてください。私も一度苦労していますhttps://www.mql5.com/ru/forum/152533/page2#982156

P.S.: さて、文字列をchar[]に変更します。

答えろ、パブリク!

パブリクよかったね!

あなたのコードはすぐに機能しました

これで

スクリプト!

あとは、インジケーターに装着するのみです

あなたのコードがインジケーターに挿入されました!

一難去ってまた一難

インジケータは名前を認識したくない

のスクリプトで、名前を書きました。

スクリプトが呼び出される場所。

あとは、スクリプトが

天下御免

お願いします

よろしくお願いします

プンサ

 
pansa:

答えろ、パブリク!

パブリックさん、さすがです。

あなたのコードはすぐに機能しました。

を実行できるようになりました。

台本だ!

あとは、インジケーターに装着するのみです

あなたのコードがインジケーターに挿入されました!

一難去ってまた一難

インジケータは名前を認識したくない

のスクリプトで、名前を書きました。

スクリプトが呼び出される場所。

あとは台本だけ

天下御免

お願いします

よろしくお願いします

パンザ




必要なら手伝うよ
 
この警告には、まだ1つ、非常に良いキャッチボールがあります(少なくとも、ありました)。論理 式の優先順位が変更されました。優先順位が括弧で明示的に定義されていない場合、コンパイラは警告を与えるだけで、論理式は以前とは全く異なる効果を持つようになった。きっとエラーなのでしょう。誰かが警告で救済することにしたのでしょう、その中に論理式に関する警告があります。
 
Vinin:

何かあれば、お手伝いしますよ。

Vininさん、こんにちは。

どうもありがとうございました

助けたい!という気持ちから

の概要についてお送りします。

コンポスタースクリプトコール

パンサー

____________________________________

Pavlikさん、こんにちは。

一例をご紹介しますと

スクリプトコールがどのように構成されたか

コンポスターで、今は使えない。

検討中

パンサー

//+------------------------------------------------------------------+

//|sample_execute_scriptです。mq4|(エムキューブ

//+------------------------------------------------------------------+

#import "user32.dll"

int RegisterWindowMessageA(string MessageName)。

int PostMessageA(int hwnd, int msg, int wparam, string Name);

void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo)。

#インポート

int start()

{

int winHandle = WindowHandle( Symbol(),Period());

//

//

//

if( signal < 0 && trigl==true && buy == true ) {StartScript( winHandle, "SchliesenProfitOrders" ); } {スタート。

//

//

//

void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)

{

int MessageNumber = RegisterWindowMessageA("MetaTrader4_Internal_Message");

PostMessageA(hWnd, MessageNumber, 16, ScriptName)を実行します。

if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }.

}

void ClearConfigDialog()

{

Sleep(100)です。

keybd_event(13, 0, 0, 0);

}

//

//

//

return(0)です。

 
pansa:

Vininさん、こんにちは。

どうもありがとうございました

助けたい!という気持ちから

の概要についてお送りします。

コンポスタースクリプトコール

パンサー

____________________________________

Pavlikさん、こんにちは。

一例をご紹介しますと

スクリプトコールがどのように構成されたか

コンポスターで、今は使えない。

検討中

パンサー


SRCを クリックしてコードを貼り 付けるのは、本当に難しいのでしょうか!

//+------------------------------------------------------------------+
//|                                        sample_execute_script.mq4 |
//+------------------------------------------------------------------+
#import "user32.dll"
  int RegisterWindowMessageA(string MessageName);
  int PostMessageA(int hwnd, int msg, int wparam, string Name);
  void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo);
#import

int start()
{
  int winHandle = WindowHandle( Symbol(), Period() );
//
//
//
  if(signal < 0 && trigl==true && buy == true) 
  {
    StartScript(winHandle, "SchliesenProfitOrders" ); 
  }
//
//
//
}
void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)
{
  int MessageNumber = RegisterWindowMessageA("MetaTrader4_Internal_Message");
  PostMessageA(hWnd, MessageNumber, 16, ScriptName);
  if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }
} 
void ClearConfigDialog()
{
  Sleep(100);
  keybd_event(13, 0, 0, 0);
}
//
//
//
return(0);
 
pansa:

これで問題なく使えるはずです。

void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)
{
    char buf[];
    StringToCharArray("MetaTrader4_Internal_Message", buf);
    int MT4InternalMsg = RegisterWindowMessageA(buf);
    StringToCharArray(ScriptName, buf);
    SendMessageA(hWnd, MT4InternalMsg, 16, buf);
    if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }
}
void ClearConfigDialog()
{
    Sleep(100);
    keybd_event(13, 0, 0, 0);

}

また、スクリプトの頭文字の大文字小文字も忘れてはいけません。例えば、「test」というスクリプトが始まらない場合は、「Test」で試してみてください。

敬称略、Pavlik ))

 
Pavlick:

これで問題なく使えるはずです。

また、スクリプトの頭文字の大文字小文字も忘れてはいけません。例えば、「test」というスクリプトが実行されない場合は、「Test」を試してみてください。

Regards, Pavlik )))


Pavlikさん、こんにちは。

リファインと

インジケータに全部入れてみた

が、インジケータはそれを望んでいない。

ようすをうかがう

を実現するために!

パンザ

//+------------------------------------------------------------------+

//|AltrEND_Signal。mq4|(エムキューブ

//| Copyright 2014, MetaQuotes Software Corp.

//|httpsを 使用しています。//wwwmql5.com|コメント||電子書籍ストア「BookLive!

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//|AltrTrend_Signal_v2_2_alertです。mq4(エムキューブ

//|ラムダス - 変換のみ 電子書籍ストア「BookLive!

//+------------------------------------------------------------------+

#property copyright "著者 - OlegVS, GOODMAN"

#プロパティの厳密さ

#import "user32.dll"

int RegisterWindowMessageA(uchar &lParam[]);

int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);

void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo)。

#インポート

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 DeepSkyBlue

#property indicator_color2 オレンジレッド

#property indicator_width1 1

#property indicator_width2 1

//---- 入力パラメータ

extern bool Alert_message=true;

extern int Time_alert_minutes=60; // ?・・・・・・・・・・???????????????????60 ?????.

extern int K = 30;

extern double Kstop = 0.5;

extern inttern Kperiod = 150;

extern int PeriodADX = 7; //14;

extern int CountBars = 100;

//---- バッファ

double val1[]。

double val2[]。

double AlertTime;

//+------------------------------------------------------------------+

//| カスタムインジケータ 初期化関数

//+------------------------------------------------------------------+

int init()

{

文字列のshort_name。

//---- インジケータ線

IndicatorBuffers(1)です。

SetIndexStyle(0,DRAW_ARROW)を設定します。

SetIndexArrow(0,241)。

IndicatorBuffers(2)です。

SetIndexStyle(1,DRAW_ARROW)を設定します。

SetIndexArrow(1,242)。

SetIndexBuffer(0,val1)を設定します。

SetIndexBuffer(1,val2)を設定します。

if(CountBars>=Bars)

CountBars=Bars。

SetIndexDrawBegin(0, Bars - CountBars + PeriodADX );

SetIndexDrawBegin(1, Bars - CountBars + PeriodADX );

//----

return(0)です。

}

//+------------------------------------------------------------------+

//| AltrTrend_Signal_v2_2|

//+------------------------------------------------------------------+

int start()

{

int i, shift, counted_bars = IndicatorCounted();

//----

if(counted_bars<0) return(-1);

//----

int i1, i2, t_per;

double Range、AvgRange、smin、smax、SsMax、SsMin、SSP、price。

bool uptrend, old;

//----

if(Bars <=PeriodADX+ 1)

return(0)です。

//----

for(shift = CountBars - PeriodADX ; shift >= 0; shift--)

{

SSP = MathCeil(Kperiod / iADX(NULL, 0, PeriodADX , PRICE_CLOSE, MODE_MAIN, 1));

レンジ=0。

AvgRange = 0;

for(i1 = shift; i1 <= shift + SSP; i1++)

{

AvgRange = AvgRange + MathAbs(High[i1] - Low[i1]);

}

Range = AvgRange / (SSP + 1)。

//----

SsMax = High[shift];

SsMin = Low[shift];

for(i2 = shift; i2 <= shift + SSP - 1; i2++)

{

price = High[i2];

if(SsMax < 価格)

SsMax= price;

価格 = Low[i2];

if(SsMin >= 価格)

SsMin = price;

}

//----

smin = SsMin + (SsMax - SsMin)*K / 100;

smax = SsMax - (SsMax - SsMin)*K / 100;

val1[shift]=0.0と する。

val2[shift]=0.0とする。

if(クローズ[シフト] < スミン)

{

uptrend = false とする。

}

if(クローズ[シフト] > smax)

{

uptrend = trueとする。

}

if(uptrend != old && uptrend == true)

{

val1[shift] = Low[shift] - Range*Kstop;

}

if(uptrend != old && uptrend == false)

{

val2[shift] = High[shift] + Range*Kstop;

}

old = アップトレンド。

}

void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)

{

{

char buf[];

StringToCharArray("MetaTrader4_Internal_Message",buf;)。

int MT4InternalMsg = RegisterWindowMessageA(buf);

StringToCharArray("fPlayer", buf);

SendMessageA(hWnd, MT4InternalMsg, 16, buf)を送信します。

if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }.

}

void ClearConfigDialog()

{

Sleep(100)です。

keybd_event(13, 0, 0, 0);

}

//---- 警告

if (Period()<Time_alert_minutes) t_per=Period(); else t_per=Time_alert_minutes; // ?!!!?<Time_alert, ???????????????????????????????????????.????????????????????.

if (Alert_message==true && CurTime()>AlertTime && val1[0]!=0.0)

{

アラート(Symbol(), "+++ BUY !!!")+++", "//AltrTrend_Signal_v2_2_alert ");

AlertTime=CurTime() + (t_per - MathMod(TimeMinute(CurTime()), t_per))*60;

//PlaySound("payment.wav")を実行します。

fPlayer ;//スクリプト

}

if (Alert_message==true && CurTime()>AlertTime && val2[0]!=0.0)

{

アラート(Symbol(), "+++ SELL !!!!+++", "//AltrTrend_Signal_v2_2_alert");

AlertTime=CurTime() + (t_per - MathMod(TimeMinute(CurTime()), t_per))*60;

// PlaySound("payment.wav")を実行する。

fPlayer です。

}

return(0)です。

}

//+------------------------------------------------------------------+