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

[Deleted]  

こんにちは。EAコードの修正にご協力ください。コード上の問題は以下の通りです:価格が所定のレベル以上であれば、取引が開始されます。価格は、それが望む限り、これらのレベルで、それぞれ、EAが取引の多くを開くことができます。

コードから">"という 記号を取り除き"="だけを 残したいのですが、私自身は">"という記号を取り除きましたが、コンパイル時に多くのエラーが 発生します。私を助けて ください。

 
// < 0 - Dn
// > 0 - Up
int Signal()
{
double RSI = iRSI(NULL,15,RSIperiod,RSI_price,SignalBar);
double Stoch = iStochastic(NULL,15,Stoch_K,Stoch_D,Stoch_slowing,Stoch_method,Stoch_price,Stoch_mode,SignalBar);
double CCI = iCCI(NULL,15,CCI_period,CCI_price,SignalBar);

double MA2 = iMA(NULL,15,ma2_period,ma2_shift,ma2_method,ma2_price,SignalBar);
double IchiA = iIchimoku(NULL, 15, tenkan, kijun, senkou_span_b, 3, SignalBar);
double IchiB = iIchimoku(NULL, 15, tenkan, kijun, senkou_span_b, 4, SignalBar); 

    if(GO && SignalType_1 && RSI >= 65 && Stoch >= 80 && CCI >= 100) {GO=false; return(+1);}//запретить повторный вход (+1);
    if(GO && SignalType_2 && Bid >= MA2 && RSI >= 65 && Stoch >= 80 && CCI>=100) {GO=false; return(+1);}//запретить повторный вход return(+1);
    if(GO && SignalType_3 && Bid >= IchiA && RSI >= 65 && Stoch >= 80 && CCI>=100) {GO=false; return(+1);}//запретить повторный вход (+1);
    
   
    
    if(GO && SignalType_1 && RSI <= 35 && Stoch <= 20 && CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    if(GO && SignalType_2 && Ask <= MA2 && RSI <= 35 && Stoch <= 20 && CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    if(GO && SignalType_3 && Ask <= IchiB && RSI <= 35 && Stoch <= 20&& CCI <= -100) {GO=false; return(-1);}//запретить повторный вход (-1);
    
    if(OrdersTotal()==0)GO=true;
    
    return(0);
}


これはコードの一部で、コード全体が必要な場合は、それを掲載します。

ありがとうございました。
 

条件チェックの前に一行入れる

if(OrdersTotal()>0)return(0)。

もう一度見て、そのコードが自分のものでないこと、そしてそれを修正する方法を知らないことに気がつきました。すでにあなたのコードにはすべてが含まれています。注文を出す場所と、なぜGO変数を無視するのかを探してください。

[Deleted]  
Roger:

条件チェックの前に一行入れる

if(OrdersTotal()>0)return(0)。

もう一度見て、私は理解しました - コードはあなたのものではなく、あなたはそれを修正する方法を知らない。すでにあなたのコードにすべてがあります。注文を出す場所と、なぜGO変数を無視するのかを探してみてください。

このコードは私のものではありませんが、私のTOSに従って私のために書かれたもので、それを修正する方法が分からないので、対処 しました。返信ありがとうございました
 

こんにちは。

週末はどこが相場なのか、(プライベートメッセージで)教えていただけませんか?

削除済み  

こんにちは、皆さん! 助けが必要です。どこがエラーなのかわからない!

要はこういうことです。時間的に基準点を設定し、仮に2012/10/29 00:00とします。配列を作り、その中に開始点から現在までの値を入れる。そして、自分が設定した価格乖離の条件を満たしているかどうかをチェックします。偏差値==10になった場合。メッセージを表示し、ポイントを先ほど設定したものから2日先にずらします。そして、その手順を繰り返す。問題は、次の配列が常に補充されるべきである、我々は十分な値を持っていないポイント29/10/2012 00:00から言うと、すべての新しい形成分バーをそれに配置し、チェックし、条件が一致するまで基準点が移動していないです== 10回です。しかし、なぜか1目盛り ごとに、スタート地点から再び値をカウントし始めます!!!!

問題解決にご協力ください皆さん、ありがとうございました!!!

//-----------------------------------------------------------------------------------------------------------------------------------
datetime Tochka_History = D'2012.10.10 17:30';           
double d[];                                            
double a;                                                 
int i;                                                   
int r=0;                                                 
int j=0;                                                  
int c=0;                                                    
datetime time;                                              
int bars;                                                   
string l;
//-----------------------------------------------------------------------------------------------------------------------------------
int start(){
if(j==0){
l=TimeToStr(Tochka_History,TIME_DATE|TIME_MINUTES);
Alert("Точка отсчета - ",l,"; Счетчик c - ",c);                                                                          
if(TimeCurrent()>=Tochka_History){                                                                                   
bars=iBarShift(NULL,PERIOD_M1,Tochka_History,false);                                                                 
time=iTime(NULL,PERIOD_M1,i);                                                                                                                                            
ArrayResize(d,bars);                                                                                                 
for(i=bars;i>0;i--) d[i]=(iHigh(NULL,PERIOD_M1,i)+iLow(NULL,PERIOD_M1,i))/2;                                        
for(i=bars;i>0;i--) Uslovie();}}}                                                                                     
//-----------------------------------------------------------------------------------------------------------------------------------
void Uslovie(){
if(r==0){a=d[i];r=1;}
if(a+10*Point<=d[i] && r==1){r=0; c=c+1; Alert("Счетчик c - ",c);}
if(c==10){Alert("Значение С достигло 10"); j=1; Smeshenie();}}
//-----------------------------------------------------------------------------------------------------------------------------------
void Smeshenie(){
Tochka_History=Tochka_History+2*24*60*60;
l=TimeToStr(Tochka_History,TIME_DATE|TIME_MINUTES);
Alert("Новая точка отсчета времени - ",l);
if(TimeDayOfWeek(Tochka_History)==6||TimeDayOfWeek(Tochka_History)==0){
Tochka_History=Tochka_History+1*24*60*60;
l=TimeToStr(Tochka_History,TIME_DATE|TIME_MINUTES);
Alert("Новая точка отсчета времени, если выпали выходные - ",l);} j=0;}
//-----------------------------------------------------------------------------------------------------------------------------------
 
merkulov.artem:

こんにちは、皆さん! 助けが必要です。どこがエラーなのかわからない!

要はこういうことです。時間的に基準点を設定し、仮に2012/10/29 00:00とします。配列を作り、その中に開始点から現在までの値を入れる。そして、自分が設定した価格乖離の条件を満たしているかどうかをチェックします。偏差値==10になった場合。メッセージを表示し、ポイントを先ほど設定したものから2日先にずらします。そして、その手順を繰り返す。問題は、次の配列が常に補充されるべきである、我々は十分な値を持っていないポイント29/10/2012 00:00から言うと、すべての新しい形成分バーをそれに配置し、チェックし、条件が一致するまで基準点が移動していないです== 10回です。しかし、なぜか1目盛りごとにスタート地点から新たに値をカウントし始める!!!!

この問題を解決するのを手伝ってください皆さん、ありがとうございました。

3回目のリクエストを見て、誰も反応しないのですが、なぜだと思いますか?おそらく、人は自分に何が求められているのかを理解していないだけなのでしょう。

偏差値==10になった場合。メ ッセージを表示し、ポイントを先ほど設定したものから2日分移動 させる・・・・。しかし、なぜか1目盛りごとにスタート地点から値を再計算し始める!!!!

それは、あなたのコードがどこから始まるかをチェックしていないからです。つまり、毎回スタート地点から始まるわけです。偏差値10で、本当に2日分ポイントがずれるのか、プリンターで確認してみてください。もし、10日ずれて、ウェイポイントが2日ずれた場合、次の目盛りを入力する前に、本当にスタートポイントを入力する必要があるのか、すでに入力されているのかをチェックする必要があります。

真相の究明が複雑ですね。問題そのものを定式化すれば、よりシンプルな解き方を教えてくれると思います。

追伸

なぜなら、その解決策を見つけるためには、大量のガラクタをリサイクルし、ふるいにかけなければならないからです。だから、自由に形にしてください。シンプルな解決策は、即効性のある解決策を意味するものではありません。もしかしたら、ここの人たちはあなたの人生を1日以上救ってくれるかもしれません。

 

ごきげんよう!!!超ド級の質問です。テスターがコード内の適切な場所に到達したら、どのように停止させればよいのですか?ヘルプにそんなこと書いてないぞ。そんなことはありえないし、その機能は貴重なものです。

2.iCustom関数の動作。実際には、この関数は常に print -1 を生成します (ジグザグのバッファコーナーがある場合を除く)。しかし、テスターではすべて0と表示されます。なぜ、このような違いがあるのでしょうか?

double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, 1);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, 1);
            
            int BUY=0,SELL=0;int ticket; 
            Print (  " strela1 " , strela1 , "   strela2  " , strela2 );


 
Dimka-novitsek:
ごきげんよう!!!超超超すごい質問。テスターがコード内の適切な場所に到達したら、どのように停止させればよいのですか?ヘルプにそんなこと書いてないぞ。そんなことはありえないし、その機能は貴重なものです。

ポーズ/ブレーク "ボタンを押させる

を検索すると、送り方の記事があります。

 
ありがとうございました。探してみます!
 
このPause-Breakのエミュレーションには対応できない。
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot=1;                          
  extern int taymfreym=0 ;                           
  extern double  stoplos=20 ;                          
  extern double  takeprofit=50 ; 
  extern double  magicnumber=350 ;                          


void BreakPoint(){if (!IsVisualMode()) return(0);keybd_event(19,0,0,0);
Sleep(10);
keybd_event(19,0,2,0);}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
----------------------------------+
int start()
  {
//----

            
            double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, 1);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, 1);
            
            int BUY=0,SELL=0;int ticket; 
            Print (  " strela1 " , strela1 , "   strela2  " , strela2 );BreakPoint();
            
    
            
            for(int i=1; i<=OrdersTotal(); i++) {  
            if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
         if (OrderMagicNumber( ) !=magicnumber)continue;
         if (OrderType()==0){ BUY++; ticket=OrderTicket( );}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );}    } }
         
   if (strela1>strela2&&BUY==0&&SELL==0){    
            
           OrderSend( NULL, OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits),  
 NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);  
            Print( "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError());BreakPoint(); }
           
   if (strela1<strela2&&BUY==0&&SELL==0){  
   
            OrderSend( NULL, OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
 NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError());BreakPoint(); }