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

 
drknn:

滑りを良くする。高速のマーケットで取引されたものであること。重要なニュースの後、ユーロバックスが1-2ティックで悪夢のような速さになることが時々あります。そして、サーバーがEAの注文を処理している間に、価格は非常に急激に変化します。


スリッページが常に大きいと、DTがシステマチックに悪用しそうで怖いです。サーバー上の価格が注文を送った時の価格より良い場合に限り、動的に「移動」させることが望ましい。もし、要求された価格がもはや利用できない場合、新しい価格が提示され、OKを押して受け入れるか、拒否するか、もちろん同じ状況であればですが、手動入札に似ています。

 

みなさん、こんにちは。次のような組み合わせになるようにお願いします。結果は、価格に沿った2本のライン、1本はAskより20pips低い...となるはずです。

しかも、1tickで20ポイントも変わるとビープ音が鳴るんです。

すべて別個に問題なく動作します。ありがとうございました。

1)Askを20pips下回るライン。

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask-20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask-20*Point);
return(0);
}

//+------------------------------------------------------------------+

2) ラインはAskの20pips上にある。

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask+20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask+20*Point);
return(0);
}

//+------------------------------------------------------------------+

3)価格の時間的変化率

#property show_inputs

extern int pips=2; //изменение аск
extern double Time_=0.1; //c. ~ tick
extern bool все_из_обзора_рынка=true; // только текущий символ - false

int i, l, p, количество_символов;
string val[], на_экран;
int Ask_save[];

//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
void start(){
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
ArrayResize(Ask_save,количество_символов);
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}
if(!все_из_обзора_рынка){
количество_символов=1;
ArrayResize(Ask_save,количество_символов);
ArrayResize(val,количество_символов);
val[0]=Symbol();
}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим

Alert("пересчитаем через "+Time_+" сек.");

for(i=0;i<количество_символов;i++){//посчитаем стоимость спреда для инструментов из обзора рынка
if((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT))>=pips){
Alert(val[i]+","+Period()+" изменился вниз на "+DoubleToStr((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)),0)+" pips");
PlaySound("timeout.wav");
}
if((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i])>=pips){
Alert(val[i]+","+Period()+" изменился вверх на "+DoubleToStr((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i]),0)+" pips");
PlaySound("email.wav");
}
Ask_save[i]=MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT);
}
Sleep(Time_*1000);//пауза сек.
}

/*
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим
на_экран="\r\n"; //отступ
for(i=0;i<количество_символов;i++)//посчитаем стоимость спреда для инструментов из обзора рынка
на_экран=на_экран+val[i]+" стоимость спреда = " + DoubleToStr(MarketInfo(val[i],MODE_SPREAD)*MarketInfo(val[i],MODE_TICKVALUE),0)+"\r\n";
Comment(на_экран);//выведем на экран
Alert("Пересчитаем");//сигнал
Sleep(3000);//пауза 3 сек.
}
*/
}
void deinit(){Comment("");}
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=


//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// функция читает из обзора рынка все фин.инстр.
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
int SymbolsList(string &Symbols[], bool Selected){
int Offset, SymbolsNumber; string SymbolsFileName;
if(Selected) SymbolsFileName = "symbols.sel"; else SymbolsFileName = "symbols.raw";
int hFile = FileOpenHistory(SymbolsFileName, FILE_BIN|FILE_READ);
if(hFile < 0) return(-1); if(Selected) { SymbolsNumber = (FileSize(hFile) - 4) / 128; Offset = 116; }
else { SymbolsNumber = FileSize(hFile) / 1936; Offset = 1924; }
ArrayResize(Symbols, SymbolsNumber);
if(Selected) FileSeek(hFile, 4, SEEK_SET);
for(int i = 0; i < SymbolsNumber; i++){Symbols[i] = FileReadString(hFile, 12); FileSeek(hFile, Offset, SEEK_CUR);}
FileClose(hFile);
return(SymbolsNumber);
}
 
Vovo4ka:

賢いペトロシアンが冗談を言いたくなるような...))

それは申し訳ない、お金はあなたのものです。あなたが増えれば増えるほど、私たちは幸せになれるのです。
 
ScioMe:

MetaEditorには、iMAインジケータが標準装備されています。ご自由にお使いください :)
どこで手に入れ、どこに置けばいいのか、まだ完全なド素人の私に教えてください・・・。
 
Vovo4ka:
みんな!リスク次第でたくさん取引できそうなものを作ろうと思っているのですが・・・出てこないものですね・・・。

どこがエラーなのか、アドバイスをお願いします...。

取引履歴に正しい種類の注文が1件だけあるか?

if(OrderProfit()>0) break;

利益確定した注文があった場合、ループから抜け出し、残りの履歴を確認しない...。

int    orders=HistoryTotal();     // history orders tota l

これが自分の機能?それともOrdersHistoryTotal()

負け注文の数を検索して迷っています。最後に閉じた注文が必要な場合、最後の注文のチェックはどこにあるのですか?

ここで、ご自身の分析のための宿題を出します。

int losses=0;
for (int i=0; i<OrdersHistoryTotal(); i++) {                // Цикл по истории терминала
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {         // Если ордер выбран ...
      if (OrderSymbol()!=Symbol())     continue;            // Если символ ордера не наш -  к следующему ордеру
      if (OrderType()>OP_SELL)         continue;            // Если тип ордера не наш -     к следующему ордеру
      if (OrderMagicNumber()!=Magic)   continue;            // Если магик ордера не наш -   к следующему ордеру
      if (OrderProfit()>=0)            continue;            // Если профит ордера в плюсе - к следующему ордеру
      if (OrderProfit()<0)                                  // Ордер закрыт в минусе ...
         losses++;                                          // Увеличиваем счётчик убыточных ордеров      
      }
   else if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {   // Если не удалось выбрать ордер ...
      Print("Error in history! ", GetLastError());          // Сообщим об ошибке и посмотрим её код
      break;                                                // Прерываем цикл перебора ордеров
      }
   }

そして、もうひとつ。

if(ldlot<0.1) ldlot=0.1;

同じように、最低限許される範囲内でチェックをするのが良いのでしょうか?

double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
if (ldlot<MinLot) ldlot=MinLot;

そして同時に、(関数にロットサイズを渡す際に)最大値より大きいか?

double MaxLot=MarketInfo(Symbol(),MODE_MAXLOT);
if (ldlot>MaxLot) ldlot=MaxLot;
 
doon:

ありがとう、でもやっぱりスリップは入れてね。

意味がわからない、なぜそこに必要なんだ?単純なことだと思うのですが。
 
ZZZEROXXX:


Slippageが常に高いと、DCが組織的に悪用するようになるのではと危惧しています。

DCが悪用し始めたら、何もできない。もう一つ、効果がありそうなことを紹介します。証券会社が変動スプレッドを採用している場合は、スプレッドサイズを 自動決定する機能を利用し、スリッページは3スプレッドに設定するのがよいでしょう。そうすると、滑りがダイナミックに変化していきます。
 
チケットでオーダーを扱う場合、変数(int Ticket)の書き方は、static localなのか、通常のglobalなのか、一般的には通常のlocalなのか、教えてください。混乱しています。ありがとうございます。
 
Fam:
チケットでオーダーを扱う場合、変数(int Ticket)はどのように書けばよいのでしょうか。静的なローカル変数として、あるいは通常のグローバル変数として、あるいは一般的に通常のローカル変数として、教えてください。混乱しています。ありがとうございます。

この変数がすべてのEA機能で利用可能になるかどうかにかかっています(まあ...すべてではありませんが、いくつかは確実にあります)。すると、その変数はグローバルになります。

1つの機能でのみ使用される場合は、ローカルとなります。

花を入れる水は、プレーンと甘酒のどちらか」というような質問です・・・。と思っているうちに、花は箒になり、お風呂に...。:))

 
ZZZEROXXX:


Slippageが常に高い状態だと、DCが組織的に悪用する可能性があるのではないかと危惧しています。サーバー上の価格が注文を送った時の価格よりも良い場合にのみ、動的に「スリッページ」を行いたいのです。もし、要求された価格がもはや利用できない場合、新しい価格が提示され、OKを押して受け入れるか、拒否するか、もちろん同じ状況であればですが、手動入札に似ています。

まずはスリッページを ボラティリティに依存させるようにしてみてください。落ち着いた市場なら最小、速い市場なら大きく広がります。