[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 22

 

こんにちは。Help for Dummies: 直前のローソク足の最小値と最大 値に 保留注文を 出すことができるEAがあるのですが、どうすればいいですか? キャンドルの方向へ開く。

ニーズがある。

- 買い保留から売り保留に変更すること。

- 前日の最小値と最大値ではなく、直前のローソク足の最小値と最大 値にする

- 注文、ロットパラメーター、ストップロス、マジックナンバーの 削除など、他はそのままに。

私のすべてのアクションは、テスターでエラー130を引き起こすか、まったくコンパイルされないかのどちらかです。何かアドバイスがあれば、よろしくお願いします。

以下は、私が介入していない状態での動作コードです。

extern double Lot = 0.01;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int Magic = 618;

int Up_bars = 0;
int Down_bars = 0;

double StopLoss_new = 0;
double TakeProfit_new = 0;

//+------------------------------------------------------------------------+
//| エキスパート初期化関数 |
//+------------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}.
//+------------------------------------------------------------------------+
//| エキスパートの初期化関数 |
//+--------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}.
//+------------------------------------------------------------------------------+
//|エキスパートスタート関数 |
//+------------------------------------------------------------------------------+
int start()
{
//-----

for( int cnt=0;cnt<OrdersTotal();cnt++)
{
if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)>0)
{
if (
(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
&& OrderMagicNumber() == Magic
&& OrderSymbol() == Symbol()
&& OrderComment() != DoubleToStr(Bars,0)
)
{
Comment("okkk");
OrderDelete(OrderTicket());
}.
}
}

StopLoss_new = StopLoss;
TakeProfit_new = TakeProfit;

if (Up_bars != Bars)
{
if (High[1]-Ask >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(High[1]-StopLoss*Point,Digits);
if (TakeProfit_new !=0) StopLoss_new = NormalizeCountry(High[1]-StopLoss*Point,Digits), { if (StopLoss_new !=0), { if (StopLoss_new != 0) TakeProfit_new = NormalizeDouble(High[1]+TakeProfit*Point,Digits);
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(High[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000);
RefreshRates();
}.
else
{
Up_bars = Bars;
}
}
}

StopLoss_new = StopLoss;
TakeProfit_new = TakeProfit;

if (Down_bars != Bars)
{
if (Bid-Low[1] >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(Low[1]+StopLoss*Point,Digits);
if (TakeProfit_new != 0) if (StopLoss_new +StopLoss*Point,Digits)= 0) TakeProfit_new = NormalizeDouble(Low[1]-TakeProfit*Point,Digits);
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Low[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000);
RefreshRates();
}.
else
{
Down_bars = Bars;
}
}
}


//----
return(0);
}.
//+------------------------------------------------------------------+

 
delf:

こんにちは。ダミーがこれを理解するのを助ける。

たまたま「どんな初心者でもできる質問」と「EAを 完全に作り直す」を混同してしまったのでしょうか?
 
LazarevDenis:

オブライト警部...まだ、誰かヒントをください。

ヒントをあげます。その表現を言葉にしてみてください。そして、間違った入れ方をしていることがわかります。

PS.
どこを見ればエラーが出るのかが一目瞭然なら、なぜ聞くのか?

 
delf:


エラー130の 場合。ストップ&テイクアウトを再考する。
 
LazarevDenis:

注文は高値からorderopenpriceまでの距離の4倍でクローズするようにお願いします。

どこで失敗したのか?

すべての注文は、開始後3ピップ以内に終了します。


計算式の結果を計算してみましたか?そうでないなら、やってくれ、デタラメが出るから。すべての条件を把握しているわけではないからかもしれません。
 

1つだけエラーが出たが、修正方法がわからない。どこが問題なのか?

'Symbol' - initialization expected C:\Program Files, FinametaTrader Filter1.mq4 (8, 13)

Symbol - initialization expected C:\Program Files, FinamMetaTrader, Filter1.mq4 (8, 13)

extern double lot=0.1;
extern double tp=0;
extern double sl=0;
int Real_Order=-1;    // Пока рыночных нет

string Symb=Symbol;                        // Финанс. инструмент

int start()     // Спец. функция start()


{                                
   OrderSend(Symbol(),OP_BUY,0.1,Ask,0,Bid-sl*Point,Ask+tp*Point); 
   if(IsDemo()) PlaySound("alert.wav");
   
      for (int i=1; i<=OrdersTotal(); i++)       //Цикл по всем ордерам,..
     {                                        //отражённым в терминале
      if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
        {  
               //--------------------------------------------------------------                                   
         if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.
         int Tip=OrderType();                   // Тип ордера
         if (Real_Order>1) continue;                   //отложник ордер  
         //------------------------------------------------------ 4 --
         double Price=OrderOpenPrice();         // Цена ордера
         if 
            NormalizeDouble(tp,sl,Digits)       // Выбор самого близкого орд       
           {         
            Real_Order=Tip;                     // Есть рыночный ордер
            int Ticket=OrderTicket();           // Номер ордера
            double Lot=OrderLots();             // Количество лотов
           }
        }                                       //Конец анализа ордера
     }                                          //Конец перебора орд.
     //---------------------------------------------------------------------+
    while(true)                                  // Цикл закрытия орд.
     {
      if (Real_Order==-1)                       // Если рыночных нет
        {
         Alert("По ",Symb," рыночных ордеров нет");
         break;                                 // Выход из цикла закр        
        }
      //--------------------------------------------------------- 7 --
      switch(Real_Order)                        // По типу ордера
        {
         case 0: double Price_Cls=Bid;          // Ордер Buy
            string Text="Buy ";                 // Текст для Buy
            break;                              // Из switch
         case 1: Price_Cls=Ask;                 // Ордер Sell
            Text="Sell ";                       // Текст для Sell
        }
      Alert("Попытка закрыть ",Text," ",Ticket,". Ожидание ответа..");
      bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Закрытие ордера
      //--------------------------------------------------------- 8 --
      if (Ans==true)                            // Получилось :)
        {
         Alert ("Закрыт ордер ",Text," ",Ticket);
         break;                                 // Выход из цикла закр
        }    
       //--------------------------------------------------------- 9 --
      int Error=GetLastError();                 // Не получилось :(
      switch(Error)                             // Преодолимые ошибки
        {
         case 135:Alert("Цена изменилась. Пробуем ещё раз..");
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
         case 136:Alert("Нет цен. Ждём новый тик..");
            while(RefreshRates()==false)        // До нового тика
               Sleep(1);                        // Задержка в цикле
            continue;                           // На след. итерацию
         case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
            Sleep(500);                         // Простое решение
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
        }
      switch(Error)                             // Критические ошибки
        {
         case 2 : Alert("Общая ошибка.");
            break;                              // Выход из switch
         case 5 : Alert("Старая версия клиентского терминала.");
            break;                              // Выход из switch
         case 64: Alert("Счет заблокирован.");
            break;                              // Выход из switch
         case 133:Alert("Торговля запрещена");
            break;                              // Выход из switch
         default: Alert("Возникла ошибка ",Error);//Другие варианты   
        }
      break;                                    // Выход из цикла закр
     }  
 
   
   return;                                   // Выход из start()
  }
 

alex12 のように、具体的に指定してください。

string Symb="EURUSD";                        // Финанс. инструмент
 
alex12:

1つだけエラーが出たが、修正方法がわからない。どこが問題なのか?

'Symbol' - initialization expected C:\Program Files, FinametaTrader Filter1.mq4 (8, 13)

Symbol - initialization expected C:\Program Files, FinamMetaTrader, Filter1.mq4 (8, 13)

持っていますね。

string Symb=Symbol;                        // Финанс. инструмен

必要です。

string Symb=Symbol();                        // Финанс. инструмент
実際、エラーメッセージを ダブルクリックすると、カーソルはコンパイルエラーの発生した指定された(ところで)場所、つまりここに移動します。(8, 13)

その後、他のエラーが発生する...。:)

上の行をstart()関数の先頭に移動させる

まずはそこから、他のエラーに対処していく...。

削除済み  

皆さん、こんにちは。

みんな、助けが必要なんだ。状況を説明する。

現在の価格は1.4100(例)私は1.4090から1.4110まで(1.4100からプラスまたはマイナス10pt)内に開かれているバーを見つける必要がある - これはOKです。

例えば、プログラムは1.4105で開いているバーを見つけて、私に合うようにしました。

そして、プログラムはこのバーとその左右のバーを比較し、低ければ適当になるはずです。

 

アーテム ここでコツがあるのは、下にこんな線があることです。

if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.

ですから、あなたが提案した方法はあまり意味がありません。もし私がalex12の 要望を正しく理解していればですが。