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

 
AA! 2012.10.30 14:07:08 2012.06.05 05:30 EA EURUSD,M30: dll call are not allowed; 'user32.dll'-'keybd_event' わかった気がする。DLLを解除するにはどうしたらいいですか?
 
いや、大丈夫そうだ!!!
 
テストではバッファは常に0です !!!もういいや、実戦で試してみよう!200本逆算して順張りのサイクルを書いて、エントリーポイントを探そう
 
すみません、ブラケットのバランスが悪いところを30分ほど探していたのですが、どういうことでしょうか?プリンターを入れてみると......。コンパイルできないのに、'wears '\end_of_program' - unbalanced left parenthesis C:\Alpariexperts╱customer.mq4 (94, 1)
 
ほら、ごめんね...。ブラケットを8回チェックし直しましたが、まあ、バランスは取れていますよ。バランスよく!それとも、そうなのか?
//+------------------------------------------------------------------+
//|                                                     советник.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 init()
  {
//----
   Print (   "  init " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {Print (   "  Начало " ); 
//----
for( int A=0; A<100 ; A++){
            
            double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, A);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, A);
            
            int BUY=0,SELL=0;int ticket; 
            Print ( A,  "  strela1 " , strela1 , "    strela2  " , strela2 ); 
            
    
            
            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( Symbol( ), 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()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),"  
         NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }
           
   if (strela1<strela2&&BUY==0&&SELL==0){  
   
            OrderSend( Symbol( ), 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()  ,"  Bid ",Bid,
   "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", NormalizeDouble( Ask- (stoplos*Point),Digits),
  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble( Bid+( takeprofit*Point),Digits); }
            
 
   if (strela1>strela2&&BUY==0&&SELL!=0){ 

         OrderSelect(ticket, SELECT_BY_TICKET);
       OrderClose(  ticket , OrderLots( ) , OrderOpenPrice( ) , 3, CLR_NONE);                 
       OrderSend(Symbol( ), 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&&SELL==0&&BUY!=0){ 
   OrderSelect(ticket, SELECT_BY_TICKET);
   OrderClose(  ticket , OrderLots( ) , OrderOpenPrice( ) , 3, CLR_NONE);                 
   OrderSend(Symbol( ), OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
 NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
        Print( "strela1<strela2&&SELL==0&&BUY!=0 " , GetLastError());BreakPoint(); }
      
      
            
     } Print (   "  Конец " );      
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Dimka-novitsek:
すみません、バランスが悪いブラケットを30分ほど探してしまいました。プリントを入れるだけで、ほら...。コンパイルできないのに、'wears '\end_of_program' - unbalanced left parenthesis C:\Alpariexperts╱customer.mq4 (94, 1)

一見したところ、最後の中括弧(main()の場合)が抜けています。

あなたのコードの最後は、分岐した

  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(); }

ps これは上記のコードに対するものです。

 
ありがとうございます!!!コードを見てみないと...。ブラケットも1つ1つ紙に書いて数えてみたんですが、バランスがいい!!!!
 
分岐はどこ?それとも私がバカなのか...。というか、この条件でオーダーを開けるだけなんです
 
drknn:

...

真相の究明が複雑ですね。きっと、問題そのものを国民に定式化すれば、もっとシンプルな解決方法を教えてくれるはずです。

追伸

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


オッケーです。私は問題の要点をお伝えしようと思います。もしかしたら、誰かがヒントをくれたり、簡単に解決できるように助けてくれるかもしれません。

1分足チャートで作業します。29/10/12 00:00のチャートの1分足(高値+安値/2-バーの平均値)を取り、これをスタート地点とする。

そして、この価格から10ピップ上方への乖離を確認します(1回の正しい乖離は+1)。

スタート地点からの乖離が10ポイントに達すると、+1カウンターになり、さらに乖離をチェックし始めますが、10ポイントに達した地点から、次の10ポイントの値上がりを待ちます。

例えば、次のようになる。

(開始点) + 10 pips <= 価格 (開始点から続くすべてのバーの価格を使用します。) カウンター = カウンター +1; を取得し、開始点はすでにこの点 -(開始点 + 10 pips) から開始されます。

(開始点+10pips)+10pips <= 価格 (基準点から続く全てのバーの価格が使用される)の場合、counter=Counter+1; となり、この点から開始 します -(開始点+10pips)+10pips.

(スタートポイント+10pips+10pips)+10pips<=価格(基準点からその後の全てのバーの価格を使用します。)の場合、カウンター=カウンター+1となり、この点からスタートします-(スタートポイント+10pips+ 10pips)+10pips.

などなど...。

カウンタが10になるまで(counter == 10)。

そして、新しく形成された1分足のバー(high+low/2 - バーの平均値)ごとに、この条件をチェックし、 カウンターが10に 達するまで待ちますカウンター== 10仮に2日経過して、新しいバーができるたびに、条件が合っているかどうかをチェックしてシフトしていった・・・・・。

そして、counter =10になったとき - "Counter == 10 "というメッセージを出力するのです。最初のユーザー定義ポイントから2日先に開始ポイントを移動させる。つまり、2012年10月29日00:00から2012年10月31日00:00に移動させ、このサイクルを繰り返す

このサイクルを繰り返すことで、スケジュールを進めていきます。

つまり、新しく形成されたバーを取り、(高値+低値/2 - バーの平均値)を描画する必要があります。そして、その状態を確認し、正しければ上記のようにシフトします。

配列で実装しようとしたのですが、非常にわかりにくく、間違った値を与えてしまいます。このアルゴリズムを実装する方法を教えてください。

 
Dimka-novitsek:
ほら、ごめんね...。ブラケットを8回チェックし直しましたが、まあ、バランスは取れていますよ。バランスよく!それとも、そうなのか?


このコードでは

            Print(
          "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),"  
         NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }

は反転したカンマ(行末のカンマ)を移動させます。