目利きの方に質問です - ページ 12

 
rid писал(а)>>

私は専門家ではないのですが。

しかし、1回目の信号の後、旗を「吊るす」のであれば、吊るさせるという前提があります。

1stシグナルがすでに枯渇していても大丈夫!

そうすると、2回目の信号で問題なく開く信号が出ます。

もし私が質問を正しく理解していれば...

しかし、私が理解しているように、フラグは変数であり、新しいティックでプログラムは初期値または新しく計算されたフラグの値を見ることになります。もしかして、私がフラッグの意味を誤解しているのでは?

 
MQLBankir >> :

しかし、フラグは私が理解しているように変数であり、新しいティックでプログラムは新しいデータからフラグの初期値または計算値を見ることになります。もしかして、私がフラッグの意味を誤解しているのでは?

付け加えると、グローバルに宣言された変数は その値を保存します。

強制的に変更されるか、番組が終了するまで>>。

 

フラッグの保護は次のように行われます。

int flag;
int start()
{
 // функция принятия решения и установки флага
 if( flag==1)
  { flag=0;
   // код защищенный от запуска флагом   
  } 
return(0);
}
ちなみに
// функция принятия решения и установки флага

は、作者のアイデア次第で、どこにでも、異なる順序でアクションを起こすことができます。

 
Urain писал(а)>>

フラッグの保護は次のように行われます。

それはそうと

は、作者のアイデア次第でどこでもよく、行動の順序を変えることができます。

>>皆さんありがとうございます。)

 

こんばんは。どこからかトラブルが降ってきた。

マーチンゲールを使ったアドバイザー。

10ステップ各ステップごとに、ポジションには別のマジシャンがいます。

当初はすべてうまくいっていた。数日前から。

ところが、突然全く動かなくなったのです!?

最初のポジションがオープンし、次のバーですぐにクローズします。

その理由は不明である。


そして、それが延々と続くのです。開いたり閉じたりする。

今日から始まったばかりです。突然ですが!?

ここからは、クロージングブロック です。

 //жжжжжжжжжжжж  Закрытие позиций жжжжжжжжжжжжжжжжжжжжжжж
 //(используются ф-и И.Кима
if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {//если есть открытые позиции
// если цена открытия первой позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic  )+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic  )>0)  ClosePositions(NULL, OP_BUY, Magic );

// если цена открытия второй  позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_2)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_2)>0) ClosePositions(NULL, OP_BUY, Magic_2);

 // если цена открытия след.  позиции меньше текущей цены на тейкпрофит - закрываем всё открытые позиции  
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_3)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_3)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_4)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_4)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_5)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_5)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_6)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_6)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_7)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_7)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_8)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_8)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_9)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_9)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_10)+ TakeProfit_Buy*Point)<=Bid&& PriceOpenLastPos(NULL, OP_BUY, Magic_10)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);  

 } 

もしかしたら、誰かがその不正確さや間違いに気づくかもしれませんね?(オープンポジションの価格によって)

 

rid писал(а) >>

理由は定かではありません。

突然、不正確な部分や間違いに気づく人はいるのでしょうか?

問題はおそらくこのコードではなく、ポジションを開くときや、 TakeProfit_Buyを計算するときに発生します。後者である可能性が高いです。

テスターで再生すれば、Printは役立つはずです。

 

私はTakeProfit_Buyを計算しません - 私はちょうど外部パラメータでそれを設定します。

extern int       TakeProfit_Buy=21;

テスターでは......同じくだりですが、ところどころで。 最初は、すべてが正常です。

そして、このクソが現れる。そして、常にではありません。

コメントやプリントを入れなければ...。

そのほかにも。新人の頃、このような魔法を使った試しはないが、忘れたことはない。

 

勘違いしているようです。もちろん、もともと探していた場所にもまったくない。

上記のクロージャーとは別に、こんなものも持っています。

//----------------------- Закрытие позиций по текй профиту ----------------------------------

if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {// если есть открытые позиции
// если очередная  позиция закрылась по тейкпрофиту , то закрываем
// все остальные позиции  
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_3 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_4 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_5 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_6 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_7 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_8 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_9 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_10))  { ClosePosFirstProfit(NULL, OP_BUY, -1);} 
                                           }

機能フラグであることが判明
isCloseLastPosByTake( )//если поза закрылась по тейку - возвращает единицу
を実行した後、他のすべてのポジションが閉じられた後でも1になります !そしてもちろん、マジックナンバー=マジックナンバーの次の最初のポジションが開かれると、それはすぐに閉じられます !

ただ、なぜこのエラーが2日間も出なかったのかは不明です ?

//--------------------------------------------------------------

またどうすればこのブロックを正しく動作させることができますか?

つまり、すべてのポジションをクローズした後、関数isCloseLastPosByTake()をリセットするにはどうすればよいでしょうか。

 
rid >> :

つまり、すべてのポジションがクローズされた後、isCloseLastPosByTake()関数をリセットするにはどうすればよいのでしょうか。

私の理解では、利益確定したポジションの開始時間は、残りの小口注文の開始時間より長いはずです。この条件を追加すれば、すべてがクールになります。

 

はい、-そうですね!TheXpert さん、ありがとうございました。

試してみます!