[아카이브!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 2. - 페이지 227

 
drknn :

미끄러짐을 늘립니다. 빠른 시장에서 거래가 열린 것 같습니다. 동일한 Eurobucks가 1-2 틱 만에 중요한 뉴스가 나온 후 발생하는 경우가 있습니다. 이는 악몽일 뿐입니다. 그리고 서버가 어드바이저의 주문을 처리하는 동안 가격은 매우 가파르게 변합니다.


Slippage가 항상 크면 DC가 체계적으로 이를 남용하기 시작할 수 있습니다. 나는 그것을 동적으로 "푸시"하고 싶습니다 - 서버의 가격이 주문이 전송된 가격보다 나은 것으로 판명된 경우에만. 애플리케이션을 수동으로 배치하는 것과 유사하게 요청한 가격이 더 이상 존재하지 않는 경우 확인을 클릭하여 동의하거나 거부할 수 있는 새 가격이 제안됩니다(물론 동일한 상황인 경우).

 

여러분, 안녕하세요! 다음 항목을 결합하도록 도와주세요. 결과적으로 가격 뒤에 두 줄, Ask by 20p 아래에 하나가 표시되어야 합니다.

다른 하나는 더 높으며 가격이 20p 변할 때 가청 신호도 제공됩니다. 1틱 동안.

따로따로 다 똑똑하게 작동하는데 합칠수가 없네요. 미리 감사드립니다!

1) 20p까지 문의하기 아래에 있습니다.

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

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

2) 라인은 20p까지 요청 위에 있습니다.

 //+------------------------------------------------------------------+
//| 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 :

예를 들어 똑똑한 Petrosyan은 농담을하고 싶어합니다 ..))

위의 사항에 대해 강력히 사과드립니다. 돈은 귀하의 것입니다. 당신이 많을수록 우리에게 더 좋습니다.
 
ScioMe :

MetaEditor에는 표준 iMA 표시기가 있습니다. 건강하세요 :)
정확히 어디서 구하고 어디에 넣어야 하는지 알려주세요 아직 찻주전자에요...
 
Vovo4ka :
사람들! 리스크에 따라 많이 매매를 하려고 노력중입니다.... 글쎄요, 잘 안되네요.... 씁니다.

어디가 잘못되었는지 알려주세요...

거래 내역에 필요한 유형의 주문이 하나만 있습니까?

 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가 남용하기 시작하면 아무 것도 도움이되지 않습니다. 여기에 효과가 있을 수 있는 다른 것이 있습니다. DC의 스프레드가 유동적이라면 스프레드 크기의 자동 감지를 어드바이저의 시작 기능에 넣고 슬리피지를 예를 들어 3개의 스프레드로 설정하는 것이 좋습니다. 그러면 미끄러짐이 동적으로 변경됩니다.
 
티켓으로 주문을 처리하는 경우 정적 로컬 또는 일반 글로벌 또는 일반적으로 일반 로컬로 변수(int Ticket)를 올바르게 작성하는 방법을 알려주세요. 젠장, 혼란스러워. 고맙습니다.
 
Fam :
티켓으로 주문을 처리하는 경우 정적 로컬 또는 일반 글로벌 또는 일반적으로 일반 로컬로 변수(int Ticket)를 올바르게 작성하는 방법을 알려주세요. 젠장, 혼란스러워. 고맙습니다.

그것은 모두 이 변수가 어드바이저의 모든 기능에 사용 가능한지 여부에 달려 있습니다. 그런 다음 - 글로벌.

하나의 기능에서만 사용되는 경우 로컬입니다.

"어떤 물에 꽃을 넣을 물에 일반 또는 달게"라는 범주의 질문 ... 추측하는 동안 꽃은 목욕에서 빗자루가되었습니다 ... :))

 
ZZZEROXXX :


Slippage가 항상 크면 DC가 체계적으로 이를 남용하기 시작할 수 있습니다. 나는 그것을 동적으로 "푸시"하고 싶습니다 - 서버의 가격이 주문이 전송된 가격보다 나은 것으로 판명된 경우에만. 애플리케이션을 수동으로 배치하는 것과 유사하게 요청한 가격이 더 이상 존재하지 않으면 확인을 클릭하여 동의하거나 거부할 수 있는 새 가격이 제안됩니다(물론 동일한 상황인 경우).

먼저 변동성에 따라 미끄러짐을 만들어 보십시오. 차분한 시장에서는 최소화되고 빠른 시장에서는 더 넓게 확장됩니다.