externint stArt = 11;
externint stOpen = 19;
------------------------------
int start()
{
int h = TimeHour(TimeCurrent());
------------------------------
if((stArt < stOpen && h >= stArt && h < stOpen) || (stArt >= stOpen && (h >= stArt || h < stOpen)))//условие входа//для выключения действия условия поставь любое значение, одинаковое для переменных. //Экономит число перестановок,значит и время при оптимизации!
ドキュメンテーションとMQLの教科書は、聖書とMQLの教科書のようなものです。
一次資料と著者の解釈、どちらを選んで読み、研究するか、考えてみてください。
すでに教科書(5、6回読んで自分用にメモ)、ドキュメント自体も(少なくとも3回)読んで、スクリプトやインジケータも作っていることですし...。今、私が質問しているのは、そのような誤解が残っている点を「拭い去る」ようなものです......。これが、私の「迷惑な」質問の繰り返しを正当化するものなのですが...。本当にブラックホールを残したくないので...。
MQLは(ロシア語とウクライナ語を除けば)全く初めての言語なので、残念ながらドキュメンテーションを「マスター」する方法はないのです))
MQLは、もともとロシア語を母国語とする人たちによって書かれた、数少ないプログラミング言語なのです。しかも、ほとんどのプログラミング言語がそうであるように、翻訳されたものではありません。だから、その本質を理解することは、実は難しいことではないのです。また、とてもとても簡単で、「第一言語」という役割にぴったりです。しかし、何事も解釈には解釈者のビジョンや手法が関わってくることを忘れないでください。ドキュメントを勉強することを強くお勧めします。掛け算の表と同じように知っておく必要があります。どうせ着くのだから、遠回りをする必要はない。
みなさん、こんにちは。
MQLを学び始めたばかりです(あまり厳しく判断しないでください)。
MQL4チュートリアルから質問があります。
プログラムを開始し、効果が出ています。
ループ演算子「for(int i=20; i<=90; i=i+10)」で20から、「for(int j=1; j<=9; j++)」で1〜9までカウントするプログラムが、10〜19までカウントすることが理解できないのですが、どのようにカウントしていますか?
説明してください。
しばらくすると注文が勝手に終了するのはどうなんだろう?
そう、コーリャおじさんがいれば...。
double valHigh = iHigh(Symbol(),PERIOD_H1,1);
double valLow = iLow(Symbol(),PERIOD_H1,1);
タイムフレームが違うとデータも違うし、直近の1時間が必要だからうまくいかない:(
異なるタイムフレームで異なるデータ、そして最後の1時間のデータが必要なのです :(
この機能はご覧になりましたか?
TOTALLY:)
感謝
ありがとうございます!!!
取引時間を設定できる機能をご存知ですか?例えば、EAが11:00から19:00までしか取引しない場合、19:00以降はポジションを閉じるかストップを置き、翌朝9:00までポジションを持ちません。
ありがとうございました。
がんばってください。どういたしまして。オープンタイム 機能は使っていません。最適化のためには、そのほうがいい。
横線の コードを書き直したとき、何を見落としたか教えてください。
int start()
{
bool fm=false;
int GLE=0;
double SvojstvoUP=111,SvojstvoDOWN=111,SvojstvoAM=TimeLocal()-4*60*60,SvojstvoPM=0;
fm=ObjectCreate("UP_LEVEL",OBJ_HLINE,0,Time[0],Bid+111*Point);
if(fm==0 || fm==-1)
fm=ObjectSet("UP_LEVEL",OBJPROP_COLOR,Green);
if(fm==0 || fm==-1)
fm=ObjectSet("UP_LEVEL",OBJPROP_WIDTH,5);
if(fm==0 || fm==-1)
SvojstvoUP=ObjectGet("UP_LEVEL",OBJPROP_PRICE1);
if(SvojstvoUP==111)
if(SvojstvoUP!=Bid+111*Point){
fm=ObjectSet("UP_LEVEL",OBJPROP_PRICE1,Bid+111*Point);
if(fm==0 || fm==-1)
return(0);}
fm=ObjectCreate("DOWN_LEVEL",OBJ_HLINE,0,0,Bid-111*Point);
if(fm==0 || fm==-1)
fm=ObjectSet("DOWN_LEVEL",OBJPROP_COLOR,Red);
if(fm==0 || fm==-1)
fm=ObjectSet("DOWN_LEVEL",OBJPROP_WIDTH,1);
if(fm==0 || fm==-1)
SvojstvoDOWN=ObjectGet("DOWN_LEVEL",OBJPROP_PRICE1);
if(SvojstvoDOWN==111)
if(SvojstvoDOWN!=Bid-111*Point){
fm=ObjectSet("DOWN_LEVEL",OBJPROP_PRICE1,Bid-111*Point);
if(fm==0 || fm==-1)
return(0);}
を縦線用のコードに置き換える。
fm=ObjectCreate("AM_LEVEL",OBJ_VLINE,0,TimeLocal()-4*60*60,0);
if(fm==0 || fm==-1)
fm=ObjectSet("AM_LEVEL",OBJPROP_COLOR,Yellow);
if(fm==0 || fm==-1)
fm=ObjectSet("AM_LEVEL",OBJPROP_WIDTH,1);
if(fm==0 || fm==-1)
SvojstvoAM=ObjectGet("AM_LEVEL",OBJPROP_PRICE1);
if(SvojstvoAM==TimeLocal()-4*60*60)
if(SvojstvoAM!=TimeLocal()-4*60*60){
fm=ObjectSet("AM_LEVEL",OBJPROP_PRICE1,TimeLocal()-4*60*60);
if(fm==0 || fm==-1)
return(0);}
fm=ObjectCreate("PM_LEVEL",OBJ_VLINE,0,Time[0],0);
if(fm==0 || fm==-1)
fm=ObjectSet("PM_LEVEL",OBJPROP_COLOR,Black);
if(fm==0 || fm==-1)
fm=ObjectSet("PM_LEVEL",OBJPROP_WIDTH,1);
if(fm==0 || fm==-1)
SvojstvoPM=ObjectGet("PM_LEVEL",OBJPROP_PRICE1);
if(SvojstvoPM==0)
if(SvojstvoPM!=Time[0]){
fm=ObjectSet("PM_LEVEL",OBJPROP_PRICE1,Time[0]);
if(fm==0 || fm==-1)
return(0);}
return(0);
}
線がない場合は正常に描画されますが、2部ではエラーになります。開始したら、その存在を確認し、定位置にない場合は配置換えする。