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

 
polsvv さん、そのためのマジック です。
 
vnn:

皆さん、こんにちは...。

MetaTrader4の履歴ファイルへのパスを構築する方法を教えていただけませんか?c:\program files, METARATOR 4 INDEXHISTORY APEX CLASSICみたいな?

https://docs.mql4.com/ru/files/FileOpenHistory
 

ありがとうございます、sergeev さん。

Print("Terminal path: ", TerminalPath() + "\\history\\" + AccountServer() + "\\");

この行は、エディタの色がおかしくても、正しいパスを出力します...。メモ帳にコードを書いたほうがいいんじゃない?冗談です。

 

みなさん、こんばんは。

セルゲイ・コバレフ氏のチュートリアルで、トレーリングストップという専門家を見つけました。MetaEditorにコピーし、コンパイルしましたが、プログラムが動きません。何が原因なのかご教示ください。もしかしたら、私のやり方が悪いのかもしれません。

 

はmqlで書かれているのでしょうか?)

コードを教えてください。

 
みんな、iCustomの使い方を教えてくれ。
を書いています。
double BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",1,0)とする。
double BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0);
うまくいかないんです.
Bandsインジケーターの上下のラインから シグナルを取得するタスクがあるのですが......。まさにバンド......。
 
//--------------------------------------------------------------- // modifystoploss.mq4 // MQL4チュートリアルの例として使用するために設計されました。 //--------------------------------------------------------------- extern int Tral_Stop=10; // Dist.chase 1 -- int start() // 特殊関数 start { string Symb=Symbol(); // Fin.Sim=Symbol()です。tool //----------------------------------------------- 2 -- for(int i=1; i<=OrdersTotal(); i++) // オーダーループ { if (OrderSelect(i-1,SELECT_BY_POS)==true) // 次があれば { // オーダー解析: int Tip=OrderType(); // オーダータイプ if(OrderSymbol()!=Symb||Tip>1)continue;// Not our order double SL=OrderStopLoss(); // Selected order の SL //------------------------------------------------------ 3 -- while(true) // 修正ループ { double TS=Tral_Stop; // 初期値 int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// 最小距離 if (TS<Min_Dist) // もし許容値以下なら、注文は削除されます。
               TS=Min_Dist; // 新しいTSの値 //-------------------------------------------------------- 4 -- bool Modify=false; // 修正を指定しない switch(Tip) // 注文種別 { case 0 : // 買い注文 if (NormalizeDouble(SL,Digits)< // 低くしたい場合.
                     NormalizeDouble(Bid-TS*Point,Digits) { SL=Bid-TS*Point; // その後修正 string Text="Buy "; // 買いのテキスト Modify=true; // 修正を割り当て } break; // 終了 case 1 : // 売り注文 if (NormalizeDouble(SL,Digits)> // 上記の要求があれば、売り注文。
                     NormalizeDouble(Ask+TS*Point,Digits)|| NormalizeDouble(SL,Digits)==0)/-or equal to zero { SL=Ask+TS*Point; // それから修正 Text="Sell "; // Modify=true; // 修正を割り当て } } // end switch if (Modify==false) // If not modified break; // exit while //------------------------------------------------------ 5 -- double TP =OrderTakeProfit() ; // 選択した注文の TP を指定。
            double Price =OrderOpenPrice(); // 選択した注文の価格 int Ticket=OrderTicket(); // 選択した注文の番号 Alert ("Modify ",Text,Ticket,".Waiting for reply..."); bool Ans=OrderModify(Ticket,Price,SL,TP,0);// 変更します!(O'Modify!)
            //--------------------------------------------------- 6 -- if (Ans==true) // うまくいった :) { Alert ("Order ",Text,Ticket," modified:)"); break; // ループモディファイからです。
              } //-------------------------------------------------------- 7 -- int Error=GetLastError(); // 失敗 :( switch(Error) // エラーを克服する { case 130:Alert("Wrong stops. Try again."); RefreshRates(); // データの更新 continue; // 次のイテレーションを行う。反復 case 136:Alert("No price. Waiting for new tick..."); while(RefreshRates()==false) // 新しいティックまで Sleep(1); // ループ内で遅延 continue; // 次回の反復 case 146:Alert("The trading subsystem is busy.Try again"); Sleep(500); // シンプルなソリューション RefreshRates(); // データを更新 continue; // 次の繰り返し // 重大なエラー case 2 : Alert("General error."); break; // 終了 switch case 5 : Alert("Old client terminal version."); break; // 終了 switch case 64 : Alert("Account blocked."); break; // 終了 switch case 133:Alert("Trading prohibited"); break; // 終了 switch default: Alert("Error",Error);//Error } break; // 修正ループ終了 } // 修正ループ終了 //-------------------------------------- 8 -- } // 注文解析終了 //-------------------------------------- 9 return; // 終了 start() } //-------------------------------------- 10 -- (注)注文解析が終了すると、注文解析が終了する。
 
VOLDEMAR:
みんな、iCustomの使い方を教えてくれ。
私は、次のように書いています。
double BBUP =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",1,0)とする。
double BBDW =iCustom(NULL, 0, "Bands", "BandsPeriod", "BandsShift", "BandsDeviations",2,0);
うまくいかないんです.
Bandsインジケーターの上下のラインからシグナルを取得するタスクがあるのですが......。 まさにバンド......。
https://docs.mql4.com/ru/indicators/iBands
 
FelixFX:

みなさん、こんばんは。

セルゲイ・コバレフ氏のチュートリアルで、トレーリングストップという専門家を見つけました。MetaEditorにコピーし、コンパイルしましたが、プログラムが動きません。何が原因なのかご教示ください。もしかしたら、私のやり方が悪いのかもしれません。


これを使ってください。

ユーザー変数には、こう書きます。

extern string   с9="------ Трейлингстоп ------";
extern int      TrailingStop=20; //Трейлинг-Стоп рыночного ордера. Если = 0 или то тарла нет
extern int      TrailingStep=5; //Шаг трала рыночного ордера
extern bool     WaitProfit = true; // Если true, то ждать профит = значению TrailingStop и только потом начинать тралить
                                    //Иначе, трейлинговать не дожидаясь положительного профита

extern string   с10=" -------- Прочие параметры -------------";
extern int      MAGIC=123456;//У ордеров открытых вручную MAGIC=0
extern int      Proskalz=10;//Проскальзывание

EAスタートで書き込みます。

// ----------------------------- Тралим ордера ------------------------------------
TrailingRyn_b(TrailingStop,TrailingStep,Proskalz,MAGIC,WaitProfit,false);

カスタムサブプログラムで起動後、書き込みます。

// =================================================================================================
// ************************* Трейлинг рыночных ордеров *********************************************
// =================================================================================================


// =================  TrailingRyn() =============================================================
// функция осуществляет трейлинг рыночных ордеров 
// ----------------------------------------------
void TrailingRyn_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, int MAGIC, bool WaitProfit,  bool UseTrailingSound) {
  string SMB=Symbol(); 
  int i;
  int MinLevel=MarketInfo(SMB,MODE_STOPLEVEL);//Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах   
  int SchBuy=SchBuy(MAGIC);
  int SchSell=SchSell(MAGIC);
  if(ryn_TrStop>=MinLevel && ryn_TrStep>0 && (SchBuy>0 || SchSell>0)){    
    for (i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {WriteError(i);}
      else {
        if (OrderSymbol()==SMB && OrderMagicNumber()==MAGIC){
          TrailingPositions_b(ryn_TrStop,ryn_TrStep,Proskalz,WaitProfit,UseTrailingSound);
        }
      }
    }
  }
 if(ryn_TrStop>=MinLevel && ryn_TrStep==0)
 Alert("Трейлинг невозможен - ryn_TrStep==0");
} 
// =================================================================================================

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, bool WaitProfit, bool UseTrailingSound){
  if(OrderType()==OP_BUY){
    if(!WaitProfit || (Bid-OrderOpenPrice())>ryn_TrStop*Point){
      if (OrderStopLoss()<Bid-(ryn_TrStop+ryn_TrStep-1)*Point){
        ModifyStopLoss_b(Bid-ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
  if(OrderType()==OP_SELL){
    if(!WaitProfit || OrderOpenPrice()-Ask>ryn_TrStop*Point) {
      if(OrderStopLoss()>Ask+(ryn_TrStop+ryn_TrStep-1)*Point || OrderStopLoss()==0){
        ModifyStopLoss_b(Ask+ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss_b(double ldStopLoss, bool UseTrailingSound){
  bool fm=false;
  string NameTrallingSound  = "ok.wav";// Наименование звукового файла для трейлинга
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if(fm!=0 && fm!=-1){
    if(UseTrailingSound) { PlaySound(NameTrallingSound);}
  }   
  if(fm==0 || fm==-1) { ModifError();}
}
//+------------------------------------------------------------------+

ModifError()のような関数は、私のカスタム関数で、エラーメッセージを 表示するだけです。代わりに自分のメッセージを書いてください。

 
ありがとうございます. もし、それが役に立っていたら、こんな質問はしていないでしょう・・・・・・・・。