[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 232

 
drknn:


レベルの価格をプログラム的に要求する必要があります。そのためには、"Fibo "オブジェクトをチャート上に配置し、設定する必要があります(すべてプログラムによるものです)。一見すると、簡単そうに見えても、実はそうでもないのです。しかし、神々は鍋を焦がさない。フィボレベルで勝負したこともありました。そして今、私はこのレベルの処理に取り組んでいます。一般的に、望めば、あなたはそれを理解することができます。

以下は、チャート上にFiboを作成するコードの例です。

レベルの価格を要求するサブルーチンを作る必要がありました。ここにあります(その気になれば解けるはずです)

すなわち、プログラム的にフィボナッチオブジェクトをフィボナッチファンに追加し、その方法だけでレベルの価格を知るべきである。 ちゃんと理解できたかな?
 
fury2006:
つまり、フィボナッチベクトルにフィボナッチオブジェクトを追加し、その方法だけで水準価格を求める必要がある。 ちゃんと理解できたかな?
標準のFiboオブジェクトをチャートに添付する必要はありません。既存の条件を考慮して、すべてのフィボレベルをプログラムで簡単に計算することができます。
を変数または配列に入力し、自分で計算した水準と価格を比較します。まさにその通りなのですが...。ただし、これはすべてIMHOの意見です。
 
artmedia70:
標準のFiboオブジェクトをチャート上に配置する必要はありません。既存の条件に基づいて、すべてのフィボレベルをプログラムで簡単に計算することができます。
を変数や配列に入れ、計算した水準と価格を比較します。まさにその通りなのですが...。ただし、これはすべてIMHOの意見です。
コード例を書いていただけますか?
 
fury2006:
コード例を書いていただけますか?
ウラジミールが提示したものよりも複雑なんだ...:))
 
artmedia70:
しかも、ウラジーミルが提案したものよりも複雑で...。:))
もっと好きかもしれない :)それに、画面上に余計なオブジェクトを表示させる必要はありません。 どうせたくさんあるのですから、余計なものは邪魔になるだけです
 
fury2006:
まあ、もっと好きになるかもしれませんが :)それに、画面にオブジェクトが増えるのも困ります。すでにたくさんあるのですから、余計なものがあると邪魔になるだけです。

私のコードは、それが書かれたExpert Advisorによって得られたデータと緊密に結合しています。この関数は必要な計算の一部に過ぎず、あなたにとって実用的な価値はないでしょう - 自己理解のためのチュートリアルとしてのみ。そしてそれは、すべての事前計算が行われる残りのコードと一緒です。

ユニバーサルにしたら動作が遅くなるけど、それは嫌だし...。:)

でも、どういたしまして。この関数は、Excelから書き換えて、計算を確認したものです。2つのパラメータが渡されます - ZigZagのブレーク(下または上、開かれた位置の種類に応じて)およびFibの価格レベル23.6。一般的に言われているようにフィブはプロットされていないが、価格は23.6フィブを突破し、あらかじめ計算された統合水準を上回ったと考えられる。ZZのブレークにfibの0が置かれ、23.6(ブレーク時)にポーズが開かれる。残りのレベルは、グローバルレベルで宣言された変数に書き込まれ、その後、注文の配列に入力され、そこから任意のオープンポジション のレベルが取得されます。

//=========================================================================================================
void CalcFiboLevel(double priceZZ, double price23)   // Рассчитывает уровни Фибы по нулевому и 23.6 значениям цен
{
   double A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,
          B2,B3,B4,B5,B6,B7,B8,B9,B10,B11;
   
   A2 = 0;                                      // Уровни фибы  
   A3 = 23.6;
   A4 = 38.2;
   A5 = 50.0;
   A6 = 61.8;
   A7 = 78.6;
   A8 = 100.0; 
   A9 = 161.8;  
   A10= 261.8; 
   A11= 423.6;    
   B2 = priceZZ;                                // Цена нулевого уровня фибы (нижний/верхний перелом ЗигЗага)
   B3 = price23;                                // Цена уровня 23.6 фибы (цена открытия позы)
   B4 = ((B3-B2) *(A4-A2) +(A3-A2) *B2)/(A3 -A2);
   B5 = ((B4-B3) *(A5-A3) +(A4-A3) *B3)/(A4 -A3);
   B6 = ((B5-B4) *(A6-A4) +(A5-A4) *B4)/(A5 -A4);
   B7 = ((B6-B5) *(A7-A5) +(A6-A5) *B5)/(A6 -A5);
   B8 = ((B7-B6) *(A8-A6) +(A7-A6) *B6)/(A7 -A6);
   B9 = ((B8-B7) *(A9-A7) +(A8-A7) *B7)/(A8 -A7);
   B10= ((B9-B8) *(A10-A8)+(A9-A8) *B8)/(A9 -A8);
   B11= ((B10-B9)*(A11-A9)+(A10-A9)*B9)/(A10-A9);
   
   
   Fibo38_Price  = B4;                         // ((B3-B2)*(A4-A2)+(A3-A2)*B2)/(A3-A2)
   Fibo50_Price  = B5;                         // ((B4-B3)*(A5-A3)+(A4-A3)*B3)/(A4-A3)
   Fibo61_Price  = B6;                         // ((B5-B4)*(A6-A4)+(A5-A4)*B4)/(A5-A4)
   Fibo78_Price  = B7;                         // ((B6-B5)*(A7-A5)+(A6-A5)*B5)/(A6-A5)
   Fibo100_Price = B8;                         // ((B7-B6)*(A8-A6)+(A7-A6)*B6)/(A7-A6)
   Fibo161_Price = B9;                         // ((B8-B7)*(A9-A7)+(A8-A7)*B7)/(A8-A7)
   Fibo261_Price = B10;                        // ((B9-B8)*(A10-A8)+(A9-A8)*B8)/(A9-A8)
   Fibo423_Price = B11;                        // ((B10-B9)*(A11-A9)+(A10-A9)*B9)/(A10-A9)

   return;
}

使い方については、Expert Advisor全体を腑分けしないと理解できないのですが......。

 
artmedia70:

私のコードは、それが書かれたExpert Advisorによって得られたデータと密接に結びついています。この関数は必要な計算の一部に過ぎず、実用的な価値はないでしょう - 自己理解のためのチュートリアルとしてだけです。そして、それは他のコードと一緒で、すべての事前計算が行われる場所です。

ユニバーサルにしたら遅くなるし、それは困るので......。:)

でも、どういたしまして。この関数は、Excelで計算を確認したものを書き直したものです。2つのパラメータが渡されます - ジグザグのブレーク(開いたポジションの種類に応じて、下または上)およびファイバーの価格レベル23.6です。一般的に言われているようにフィブはプロットされていないが、価格は23.6フィブを突破し、あらかじめ計算された統合水準を上回ったと考えられる。ZZのブレークにfibの0が置かれ、23.6(ブレーク時)にポーズが開かれる。残りのレベルは、グローバルレベルで宣言された変数に書き込まれ、その後、注文の配列に入力され、そこから任意のオープンポジションのレベルが取得されます。

使い方については、Expert Advisor全体を腑分けして明確にする必要があります...。

すごいな、アイデアをもらったよ。
 

皆さん、こんにちは。次のようなことを組み合わせたいので、よろしくお願いします。結果は、価格に沿った2本のライン、1本はAskより20pips低い...となるはずです。

しかも、1tickで20ポイントも変わるとビープ音が鳴るんです。

すべて別個に問題なく動作します。ありがとうございました。

1)Askを20pips下回るライン。

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask-20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask-20*Point);
return(0);
}

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

2) ラインはAskの20pips上にある。

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask+20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask+20*Point);
return(0);
}

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

3)価格の時間的変化率

#property show_inputs

extern int pips=2; //изменение аск
extern double Time_=0.1; //c. ~ tick
extern bool все_из_обзора_рынка=true; // только текущий символ - false

int i, l, p, количество_символов;
string val[], на_экран;
int Ask_save[];

//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
void start(){
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
ArrayResize(Ask_save,количество_символов);
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}
if(!все_из_обзора_рынка){
количество_символов=1;
ArrayResize(Ask_save,количество_символов);
ArrayResize(val,количество_символов);
val[0]=Symbol();
}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим

Alert("пересчитаем через "+Time_+" сек.");

for(i=0;i<количество_символов;i++){//посчитаем стоимость спреда для инструментов из обзора рынка
if((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT))>=pips){
Alert(val[i]+","+Period()+" изменился вниз на "+DoubleToStr((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)),0)+" pips");
PlaySound("timeout.wav");
}
if((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i])>=pips){
Alert(val[i]+","+Period()+" изменился вверх на "+DoubleToStr((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i]),0)+" pips");
PlaySound("email.wav");
}
Ask_save[i]=MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT);
}
Sleep(Time_*1000);//пауза сек.
}

/*
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим
на_экран="\r\n"; //отступ
for(i=0;i<количество_символов;i++)//посчитаем стоимость спреда для инструментов из обзора рынка
на_экран=на_экран+val[i]+" стоимость спреда = " + DoubleToStr(MarketInfo(val[i],MODE_SPREAD)*MarketInfo(val[i],MODE_TICKVALUE),0)+"\r\n";
Comment(на_экран);//выведем на экран
Alert("Пересчитаем");//сигнал
Sleep(3000);//пауза 3 сек.
}
*/
}
void deinit(){Comment("");}
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=


//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// функция читает из обзора рынка все фин.инстр.
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
int SymbolsList(string &Symbols[], bool Selected){
int Offset, SymbolsNumber; string SymbolsFileName;
if(Selected) SymbolsFileName = "symbols.sel"; else SymbolsFileName = "symbols.raw";
int hFile = FileOpenHistory(SymbolsFileName, FILE_BIN|FILE_READ);
if(hFile < 0) return(-1); if(Selected) { SymbolsNumber = (FileSize(hFile) - 4) / 128; Offset = 116; }
else { SymbolsNumber = FileSize(hFile) / 1936; Offset = 1924; }
ArrayResize(Symbols, SymbolsNumber);
if(Selected) FileSeek(hFile, 4, SEEK_SET);
for(int i = 0; i < SymbolsNumber; i++){Symbols[i] = FileReadString(hFile, 12); FileSeek(hFile, Offset, SEEK_CUR);}
FileClose(hFile);
return(SymbolsNumber);
}
 

このコードが一箇所でフリーズして、再開するためにターミナルを再起動しなければならないことがあるのはなぜか、説明していただけますか?

int ticket,err;
         Alert("nachalo");
         ticket = OrderSend(Symbol (), OP_BUY, 1, Ask, 10,0,0, "dsgdsf", 0, 0, CLR_NONE);
         err = GetLastError();
         Alert (err);
         Alert("konec");
         OrderClose (ticket,1,Bid,5,CLR_NONE);
         Alert ("zakrito");
 
globad:

皆さん、こんにちは。次のようなことを組み合わせたいので、よろしくお願いします。結果は、価格に沿った2本のライン、1本はAskより20pips低い...となるはずです。

しかも、1tickで20ポイントも変わるとビープ音が鳴るんです。

すべて別個に問題なく動作します。ありがとうございました。

1)Askを20pips下回るライン。

2) ラインはAskの20pips上にある。

3)価格の時間的変化率


もうつまらないような...。初歩的なことだよ、ワトソン。

ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask-20*Point) ;

一本の線の名前です。

ヒント:2行目の名前を調べてみてください。1とは違うのでしょうか?

そうです。そして、すでに建設された 施設をなぜ作り続けるのでしょうか?

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask+20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask+20*Point);
return(0);
}

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

さて、その違いを見てみましょう。

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
if (ObjectFind("MyPriceLine")<0) ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask+20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask+20*Point);
return(0);
}

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