답변 감사합니다만 OrderSend 함수의 시작 부분을 작성할 수 있습니까? 마지막 괄호 바로 뒤에 와야 하나요????
여기 예가 있습니다
#define OP_BALANCE 6int TRY =1;int TRADESLEEP =1000;int SLIPPAGE =3;int start (){
// ничего не делать
int action = OP_BALANCE ;if( isTime (Period()*60)){// закрываем ордера по текущему инструменту
closeAllOrdersBySymbol ( SLIPPAGE , TRY , TRADESLEEP );
// получаем условие покупать, продавать, ничего не делать
action = getAction ();if( action == OP_BALANCE )return(0);// для примера минимальный лот double lots =MarketInfo(Symbol(),MODE_MINLOT);//количество пунктов для стоплоса и текпрофита - сами определитеint slPoint =0, tpPoint =0;string сomment ="";// значение для комментария по умолчаниюint magicNumer =0;// значение по умолчанию// открываем позицию - while используется для того чтобы открывать позицию пока она не откроетсяwhile(! openOrder ( action , lots , slPoint , tpPoint , SLIPPAGE , сomment , magicNumer , TRY , TRADESLEEP )){}}return(0);}//+------------------------------------------------------------------+//| открывает позицию по рынку |//+------------------------------------------------------------------+int getAction (){int act = OP_BALANCE ;/* здесь нужно написать логику,
если что-то, то покупать act = OP_BUY;
если что-то, то продавать act = OP_SELL;
*/return( act );}//+------------------------------------------------------------------+//| открывает позицию по рынку |//+------------------------------------------------------------------+bool openOrder (int type ,double lots ,int slPoint ,int tpPoint ,int slippage ,string comment ,int magicNumer ,int try ,int tradeSleep ){bool res =false;int err =0;double price , tp =0, sl =0, ask =0, bid =0;color col =CLR_NONE;Comment("Открытие ордера...");while( try !=0){while(IsTradeContextBusy()||!IsTradeAllowed()){Comment("Торговый поток занят...");Sleep( tradeSleep );}RefreshRates();
ask =MarketInfo(Symbol(),MODE_ASK);
bid =MarketInfo(Symbol(),MODE_BID);if( type ==OP_BUY){
price = ask ; col =Red;if( slPoint >0) sl = bid - slPoint *Point;if( tpPoint >0) tp = ask + tpPoint *Point;}if( type ==OP_SELL){
price = bid ; col =Blue;if( slPoint >0) sl = ask + slPoint *Point;if( tpPoint >0) tp = bid - tpPoint *Point;}if( type ==OP_BUY&&AccountFreeMarginCheck(Symbol(),OP_BUY, lots )<=0||GetLastError()==134){Comment("Недостаточно свободных средств !");Sleep(2000);return( res );}if( type ==OP_SELL&&AccountFreeMarginCheck(Symbol(),OP_SELL, lots )<=0||GetLastError()==134){Comment("Недостаточно свободных средств !");Sleep(2000);return( res );}
res =OrderSend(Symbol(), type , lots , price , slippage , sl , tp , comment , magicNumer ,0, col );if( res !=-1){PlaySound("alert.wav");
try =0;Comment("Ордер открыт !");}else{
err =GetLastError();if( err >1) try =0;Comment("Ошибка - ", err );}Sleep(2000);}return( res );}//+------------------------------------------------------------------+//| закрытие одеров//+------------------------------------------------------------------+ bool closeAllOrdersBySymbol (int slippage ,int try ,int tradeSleep ){int k =OrdersTotal(), err , nextTry ;string msg ="";bool res =false;for(int i =0; i < k ; i ++){if(OrderSelect( i , SELECT_BY_POS , MODE_TRADES )&&OrderSymbol()==Symbol()){
nextTry = try ;while( nextTry !=0){while(IsTradeContextBusy()||!IsTradeAllowed()){Comment("Торговый поток занят ...");Sleep( tradeSleep );}
res =OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), slippage ,CLR_NONE);if( res ){
nextTry =0;
res =true;Comment("Ордер закрыт !");}else{if( err >1) nextTry =0;Comment("Ошибка - ", err );}}}}return( res );}//+------------------------------------------------------------------+ bool isTime (int sec ){bool res =false;staticdatetime time =0;double min =0;if(TimeCurrent()>= time ){
min =MathFloor( sec /60);if( min ==0) min =1.0;
time =iTime(NULL,PERIOD_H1,0)+(MathFloor(Minute()/ min )+1)* min *60;
res =true;}return( res );}
질문은 초보자가 자신이 모르는 것을 묻는 것입니다. 이 코드 예제는 Expert Advisor의 구조(올바른 구조)를 이해하는 데 사용됩니다.
그리고 이 코드 조각에 투자된 것은 거래의 CLASSICAL 원칙에 따라 구축됩니다. 어드바이저 자체와 코드 샘플 모두 원칙을 연구하는 데 사용되며 누군가를 속이거나 무언가를 잡기 위한 것이 아닙니다........제가 묻는 것은 명확하지 않다는 뜻입니다. 결국, 순전히 이론적으로 무엇을, 어떻게 이해해야 하는 동안. 그런 다음 만들고, 조각하고, 발명하십시오........
keekkenen 02/25/2009 11:34 1) OrderSend (...) 함수에 int 유형이 있고 bool 유형으로 정의하고 bool 유형에 -1 값이 없는지 설명하십시오. 얼마나 정확한지 이것? 2) KimIV의 경우 위치 열림 함수에서 for(..) 루프를 통해 반복이 수행되고, 귀하의 경우 while(...)을 통해 반복됩니다. 어떤 방법이 더 낫다고 생각합니까?
1. 이것은 실수입니다. res를 int로 선언하고 다른 bool 유형 변수를 추가하여 주문 열기 성공/실패 값을 반환해야 합니다 .
2. 이전에도 Igor의 OpenPosition() 함수 구현 중 하나를 사용했지만 나중에 오류를 포착하고 이에 대한 메시지를 표시하기 쉽도록 함수를 변경했습니다.
최종 결과는 구조였습니다
while( try !=0){// определение условий для открытыия позиции//..// открытие позициц
res =OrderSend(...);if( res >0){PlaySound("alert.wav");
try =0;Comment("Ордер открыт !");Sleep(2000);
ret =true;}else{/* блок определения ошибок и возврат
err - уровень критичности ошибки (0,1,2,3)
msg - описание ошибки (если showErrors = true)
уровни определяются по номеру ошибки
0-нет ошибки, 1-надо ждать и обновлять,
2-сделка бракуется,3-фатальная ошибка*/
ErrorBlock ( showErrors , err , msg );if( err >1) try =0;// в данном случае 2 и 3 критичныComment("Ошибка - ", msg );Sleep(2000);}}
사실은 주문을 마감하는 OrderClose() 함수는 주문 번호를 첫 번째 매개 변수로 사용하고 주문 번호는 OrderSelect()를 통해 기존 주문에 액세스해야만 얻을 수 있으므로 일반적인 경우 닫기가 뭔가 보입니다. 이와 같이..
OrdersTotal() = 0인 경우, 즉 열린 주문이 없으면 for 루프가 즉시 종료됩니다.
답변 감사합니다만 OrderSend 함수의 시작 부분을 작성할 수 있습니까? 마지막 괄호 바로 뒤에 와야 하나요????
답변 감사합니다만 OrderSend 함수의 시작 부분을 작성할 수 있습니까? 마지막 괄호 바로 뒤에 와야 하나요????
여기 예가 있습니다
말해봐, "거래" 탭에 표시된 미결 주문에 대한 마진 수준(퍼센트) 값을 반환하는 함수는 무엇입니까?
도움말에 나열된 함수 중 어느 것도 이 값을 반환하지 않습니다.
계정마진
AccountFreeMargin
AccountFreeMarginCheck
계정무료마진모드
Damiani_Volt 표시기를 사용할 수 있습니다.
흥미로운 내용, 감사합니다.
여기있어
덕분에
내가 화났다는 생각은 어디서 났어?
나는 단지 그것을 설명하고있다
모든 불평등 기호를 취하고 운전
테스터에서 긍정적인 결과를 얻을 수 있습니다.
결과, 특정 수준, 어떤 수준에 관계없이
긍정적이든 부정적이든. 그리고 질문에
마이너스가 있든 없든 레벨을 잡는 방법,
불행히도 명확한 구분이 없습니다.
내가 틀릴수도...........
질문은 초보자가 자신이 모르는 것을 묻는 것입니다. 이 코드 예제는 Expert Advisor의 구조(올바른 구조)를 이해하는 데 사용됩니다.
그리고 이 코드 조각에 투자된 것은 거래의 CLASSICAL 원칙에 따라 구축됩니다. 어드바이저 자체와 코드 샘플 모두 원칙을 연구하는 데 사용되며 누군가를 속이거나 무언가를 잡기 위한 것이 아닙니다........제가 묻는 것은 명확하지 않다는 뜻입니다. 결국, 순전히 이론적으로 무엇을, 어떻게 이해해야 하는 동안. 그런 다음 만들고, 조각하고, 발명하십시오........
1. 이것은 실수입니다. res를 int로 선언하고 다른 bool 유형 변수를 추가하여 주문 열기 성공/실패 값을 반환해야 합니다 .
2. 이전에도 Igor의 OpenPosition() 함수 구현 중 하나를 사용했지만 나중에 오류를 포착하고 이에 대한 메시지를 표시하기 쉽도록 함수를 변경했습니다.
최종 결과는 구조였습니다