中文字幕av无码不卡免费_蜜臀AV无码精品人妻色欲_亚洲成AV人片在线观看无码不卡_无码专区天天躁天天躁在线

您現在的位置:程序化交易>> 外匯現貨>> MT5>> MT5知識>>正文內容

MACD Sample ---真正的用面向對象的思路來寫EA [MT4]

  • 我初步看了下系統自帶的MACD Sample EA,這個實例其實用原來MT4的方式實現起來很簡單。
    但是我看了系統自帶的代碼:簡直和C++代碼沒什么區別了:
    首先應用頭文件或者說是庫文件。這些文件其實都是類庫文件,每個類里面自帶了許多處理方法
    接著定義一個類
    然后吧一些變量和方法都封裝到類中。
    最后void OnTick()程序實體部分簡單的不可想象:
    就是定義一個類的實例,然后調用一個類的方法就完了。
    以后有時間我好好分析分析。
    //+------------------------------------------------------------------+
    //| MACD Sample.mq5 |
    //| Copyright 2001-2009, MetaQuotes Software Corp. |
    //| http://www.mql5.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2001-2009, MetaQuotes Software Corp."
    #property link "http://www.mql5.com"
    #property version "5.04"
    #property description "It is important to make sure that the expert works with a normal"
    #property description "chart and the user did not make any mistakes setting input"
    #property description "variables (Lots, TakeProfit, TrailingStop) in our case,"
    #property description "we check TakeProfit on a chart of more than 2*trend_period bars"
    //---
    #include <Trade\Trade.mqh> 引用頭文件
    #include <Trade\SymbolInfo.mqh>
    #include <Trade\PositionInfo.mqh>
    #include <Trade\AccountInfo.mqh>
    #include <Indicators\Indicators.mqh>

    //---
    input double InpLots =0.1; // Lots
    input int InpTakeProfit =50; // Take Profit (in pips)
    input int InpTrailingStop =30; // Trailing Stop Level (in pips)
    input double InpMACDOpenLevel =0.3; // MACD open level
    input double InpMACDCloseLevel=0.2; // MACD close level
    input int InpMATrendPeriod =26; // MA trend period
    //---
    int ExtTimeOut=10; // time out in seconds between trade operations
    //+------------------------------------------------------------------+
    //| MACD Sample expert class |
    //+------------------------------------------------------------------+
    class CSampleExpert
    {
    protected:
    double m_adjusted_point; // point value adjusted for 3 or 5 points
    CTrade m_trade; // trading object
    CSymbolInfo m_symbol; // symbol info object
    CPositionInfo m_position; // trade position object
    CAccountInfo m_account; // account info wrapper
    //--- indicators
    CIndicators *m_indicators; // indicator collection to fast recalculations
    CiMACD *m_MACD; // MACD indicator object
    CiMA *m_EMA; // moving average indicator object
    //--- indicator data for processing
    double m_macd_current;
    double m_macd_previous;
    double m_signal_current;
    double m_signal_previous;
    double m_ema_current;
    double m_ema_previous;
    public:
    CSampleExpert();
    ~CSampleExpert() { Deinit(); }
    bool Init();
    void Deinit();
    bool Processing();
    protected:
    bool InitCheckParameters(int digits_adjust);
    bool InitIndicators();
    bool LongClosed();
    bool ShortClosed();
    bool LongModified();
    bool ShortModified();
    bool LongOpened();
    bool ShortOpened();
    };
    //---
    CSampleExpert ExtExpert;
    //+------------------------------------------------------------------+
    //| Constructor |
    //+------------------------------------------------------------------+
    CSampleExpert::CSampleExpert()
    {
    //---
    m_adjusted_point=0;
    m_indicators=NULL;
    m_MACD=NULL;
    m_EMA =NULL;
    //---
    m_macd_current =0;
    m_macd_previous =0;
    m_signal_current =0;
    m_signal_previous=0;
    m_ema_current =0;
    m_ema_previous =0;
    //---
    }
    //+------------------------------------------------------------------+
    //| Initialization and checking for input parameters |
    //+------------------------------------------------------------------+
    bool CSampleExpert::Init()
    {
    //--- initialize common information
    m_symbol.Name(Symbol()); // symbol
    m_trade.SetExpertMagicNumber(12345); // magic
    //--- tuning for 3 or 5 digits
    int digits_adjust=1;
    if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10;
    m_adjusted_point=m_symbol.Point()*digits_adjust;
    //--- set default deviation for trading in adjusted points
    m_trade.SetDeviationInPoints(3*digits_adjust);
    //---
    if(!InitCheckParameters(digits_adjust)) return(false);
    if(!InitIndicators()) return(false);
    //--- ok
    return(true);
    }
    //+------------------------------------------------------------------+
    //| Checking for input parameters |
    //+------------------------------------------------------------------+
    bool CSampleExpert::InitCheckParameters(int digits_adjust)
    {
    //--- initial data checks
    if(InpTakeProfit*digits_adjust<m_symbol.StopsLevel())
    {
    printf("Take Profit must be greater than %d",m_symbol.StopsLevel());
    return(false);
    }
    if(InpTrailingStop*digits_adjust<m_symbol.StopsLevel())
    {
    printf("Trailing Stop must be greater than %d",m_symbol.StopsLevel());
    return(false);
    }
    //--- check for right lots amount
    if(InpLots<m_symbol.LotsMin() || InpLots>m_symbol.LotsMax())
    {
    printf("Lots amount must be in the range from %f to %f",m_symbol.LotsMin(),m_symbol.LotsMax());
    return(false);
    }
    if(MathAbs(MathMod(InpLots,m_symbol.LotsStep()))>1.0E-15)
    {
    printf("Lots amount is not corresponding with lot step %f",m_symbol.LotsStep());
    return(false);
    }
    //--- warning
    if(InpTakeProfit<=InpTrailingStop)
    printf("Warning: Trailing Stop must be greater than Take Profit");
    //--- ok
    return(true);
    }
    //+------------------------------------------------------------------+
    //| Initialization of the indicators |
    //+------------------------------------------------------------------+
    bool CSampleExpert::InitIndicators()
    {
    //--- create indicators collection
    if(m_indicators==NULL)
    if((m_indicators=new CIndicators)==NULL)
    {
    printf("Error creating indicators collection");
    return(false);
    }
    //--- create MACD indicator and add it to collection
    if(m_MACD==NULL)
    if((m_MACD=new CiMACD)==NULL)
    {
    printf("Error creating MACD indicator");
    return(false);
    }
    if(!m_indicators.Add(m_MACD))
    {
    printf("Error adding MACD indicator to collection");
    return(false);
    }
    //--- initialize MACD indicator
    if(!m_MACD.Create(NULL,0,12,26,9,PRICE_CLOSE))
    {
    printf("Error MACD indicator init");
    return(false);
    }
    m_MACD.BuffSize(2);
    //--- create EMA indicator and add it to collection
    if(m_EMA==NULL)
    if((m_EMA=new CiMA)==NULL)
    {
    printf("Error creating EMA indicator");
    return(false);
    }
    if(!m_indicators.Add(m_EMA))
    {
    printf("Error adding EMA indicator to collection");
    return(false);
    }
    //--- initialize EMA indicator
    if(!m_EMA.Create(NULL,0,InpMATrendPeriod,0,MODE_EMA,PRICE_CLOSE))
    {
    printf("Error EMA indicator init");
    return(false);
    }
    m_EMA.BuffSize(2);
    //--- ok
    return(true);
    }
    //+------------------------------------------------------------------+
    //| Function for deleting of dynamic objects |
    //+------------------------------------------------------------------+
    void CSampleExpert::Deinit()
    {
    //--- delete indicators collection
    if(m_indicators!=NULL)
    {
    delete m_indicators;
    m_indicators=NULL;
    m_MACD=NULL;
    m_EMA =NULL;
    }
    //---
    }
    //+------------------------------------------------------------------+
    //| Check for long position closing |
    //+------------------------------------------------------------------+
    bool CSampleExpert::LongClosed()
    {
    bool res=false;
    //--- should it be closed?
    if(m_macd_current>0)
    if(m_macd_current<m_signal_current && m_macd_previous>m_signal_previous)
    if(m_macd_current>InpMACDCloseLevel*m_adjusted_point)
    {
    //--- close position
    if(m_trade.PositionClose(Symbol()))
    printf("Long position by %s to be closed",Symbol());
    else
    printf("Error closing position by %s : '%s'",Symbol(),m_trade.ResultComment());
    //--- processed and cannot be modified
    res=true;
    }
    //---
    return(res);
    }
    //+------------------------------------------------------------------+
    //| Check for short position closing |
    //+------------------------------------------------------------------+
    bool CSampleExpert::ShortClosed()
    {
    bool res=false;
    //--- should it be closed?
    if(m_macd_current<0)
    if(m_macd_current>m_signal_current && m_macd_previous<m_signal_previous)
    if(MathAbs(m_macd_current)>InpMACDCloseLevel*m_adjusted_point)
    {
    //--- close position
    if(m_trade.PositionClose(Symbol()))
    printf("Short position by %s to be closed",Symbol());
    else
    printf("Error closing position by %s : '%s'",Symbol(),m_trade.ResultComment());
    //--- processed and cannot be modified
    res=true;
    }
    //---
    return(res);
    }
    //+------------------------------------------------------------------+
    //| Check for long position modifying |
    //+------------------------------------------------------------------+
    bool CSampleExpert::LongModified()
    {
    bool res=false;
    //--- check for trailing stop
    if(InpTrailingStop>0)
    {
    if(m_symbol.Bid()-m_position.PriceOpen()>m_adjusted_point*InpTrailingStop)
    {
    if(m_position.StopLoss()<m_symbol.Bid()-m_adjusted_point*InpTrailingStop || m_position.StopLoss()==0.0)
    {
    double sl=m_symbol.Bid()-m_adjusted_point*InpTrailingStop;
    double tp=m_position.TakeProfit();
    //--- modify position
    if(m_trade.PositionModify(Symbol(),sl,tp))
    printf("Long position by %s to be modified",Symbol());
    else
    {
    printf("Error modifying position by %s : '%s'",Symbol(),m_trade.ResultComment());
    printf("Modify parameters : SL=%f,TP=%f",sl,tp);
    }
    //--- modified and must exit from expert
    res=true;
    }
    }
    }
    //---
    return(res);
    }
    //+------------------------------------------------------------------+
    //| Check for short position modifying |
    //+------------------------------------------------------------------+
    bool CSampleExpert::ShortModified()
    {
    bool res=false;
    //--- check for trailing stop
    if(InpTrailingStop>0)
    {
    if((m_position.PriceOpen()-m_symbol.Ask())>(m_adjusted_point*InpTrailingStop))
    {
    if((m_position.StopLoss()>(m_symbol.Ask()+m_adjusted_point*InpTrailingStop)) || m_position.StopLoss()==0.0)
    {
    double sl=m_symbol.Ask()+m_adjusted_point*InpTrailingStop;
    double tp=m_position.TakeProfit();
    //--- modify position
    if(m_trade.PositionModify(Symbol(),sl,tp))
    printf("Short position by %s to be modified",Symbol());
    else
    {
    printf("Error modifying position by %s : '%s'",Symbol(),m_trade.ResultComment());
    printf("Modify parameters : SL=%f,TP=%f",sl,tp);
    }
    //--- modified and must exit from expert
    res=true;
    }
    }
    }
    //---
    return(res);
    }
    //+------------------------------------------------------------------+
    //| Check for long position opening |
    //+------------------------------------------------------------------+
    bool CSampleExpert::LongOpened()
    {
    bool res=false;
    //--- check for long position (BUY) possibility
    if(m_macd_current<0)
    if(m_macd_current>m_signal_current && m_macd_previous<m_signal_previous)
    if(MathAbs(m_macd_current)>(InpMACDOpenLevel*m_adjusted_point) && m_ema_current>m_ema_previous)
    {
    //--- check for free money
    if(m_account.FreeMarginCheck(Symbol(),0,InpLots)<0.0)
    printf("We have no money. Free Margin = %f",m_account.FreeMargin());
    else
    {
    double price=m_symbol.Ask();
    double tp =m_symbol.Ask()+InpTakeProfit*m_adjusted_point;
    //--- open position
    if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,0.0,tp))
    printf("Position by %s to be opened",Symbol());
    else
    {
    printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
    printf("Open parameters : price=%f,TP=%f",price,tp);
    }
    }
    //--- in any case we must exit from expert
    res=true;
    }
    //---
    return(res);
    }
    //+------------------------------------------------------------------+
    //| Check for short position opening |
    //+------------------------------------------------------------------+
    bool CSampleExpert::ShortOpened()
    {
    bool res=false;
    //--- check for short position (SELL) possibility
    if(m_macd_current>0)
    if(m_macd_current<m_signal_current && m_macd_previous>m_signal_previous)
    if(m_macd_current>(InpMACDOpenLevel*m_adjusted_point) && m_ema_current<m_ema_previous)
    {
    //--- check for free money
    if(m_account.FreeMarginCheck(Symbol(),0,InpLots)<0.0)
    printf("We have no money. Free Margin = %f",m_account.FreeMargin());
    else
    {
    double price=m_symbol.Bid();
    double tp =m_symbol.Bid()-InpTakeProfit*m_adjusted_point;
    //--- open position
    if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,price,0.0,tp))
    printf("Position by %s to be opened",Symbol());
    else
    {
    printf("Error opening SELL position by %s : '%s'",Symbol(),m_trade.ResultComment());
    printf("Open parameters : price=%f,TP=%f",price,tp);
    }
    }
    //--- in any case we must exit from expert
    res=true;
    }
    //---
    return(res);
    }
    //+------------------------------------------------------------------+
    //| main function returns true if any position processed |
    //+------------------------------------------------------------------+
    bool CSampleExpert::Processing()
    {
    //--- refresh rates
    if(!m_symbol.RefreshRates()) return(false);
    //--- refresh indicators
    m_indicators.Refresh();
    //--- to simplify the coding and speed up access
    //--- data are put into internal variables
    m_macd_current =m_MACD.Main(0);
    m_macd_previous =m_MACD.Main(1);
    m_signal_current =m_MACD.Signal(0);
    m_signal_previous=m_MACD.Signal(1);
    m_ema_current =m_EMA.Main(0);
    m_ema_previous =m_EMA.Main(1);
    //--- it is important to enter the market correctly,
    //--- but it is more important to exit it correctly...
    //--- first check if position exists - try to select it
    if(m_position.Select(Symbol()))
    {
    if(m_position.PositionType()==OP_BUY)
    {
    //--- try to close or modify long position
    if(LongClosed()) return(true);
    if(LongModified()) return(true);
    }
    else
    {
    //--- try to close or modify short position
    if(ShortClosed()) return(true);
    if(ShortModified()) return(true);
    }
    }
    //--- no opened position identified
    else
    {
    //--- check for long position (BUY) possibility
    if(LongOpened()) return(true);
    //--- check for short position (SELL) possibility
    if(ShortOpened()) return(true);
    }
    //--- exit without position processing
    return(false);
    }
    //+------------------------------------------------------------------+
    //| Expert initialization function |
    //+------------------------------------------------------------------+
    int OnInit()
    {
    //--- create all necessary objects
    if(!ExtExpert.Init())
    {
    ExtExpert.Deinit();
    return(-1);
    }
    //--- ok
    return(0);
    }
    //+------------------------------------------------------------------+
    //| Expert deinitialization function |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
    {
    ExtExpert.Deinit();
    }
    //+------------------------------------------------------------------+
    //| Expert new tick handling function |
    //+------------------------------------------------------------------+
    void OnTick()
    {
    static datetime limit_time=0; // last trade processing time + timeout
    //--- don't process if timeout
    if(TimeCurrent()>=limit_time)
    {
    //--- check for data
    if(Bars(Symbol(),Period())>2*InpMATrendPeriod)
    {
    //--- change limit time by timeout in seconds if processed
    if(ExtExpert.Processing()) limit_time=TimeCurrent()+ExtTimeOut;
    }
    }
    //---
    }
    //+------------------------------------------------------------------+


【字體: 】【打印文章】【查看評論

相關文章

    沒有相關內容
中文字幕av无码不卡免费_蜜臀AV无码精品人妻色欲_亚洲成AV人片在线观看无码不卡_无码专区天天躁天天躁在线

欧美.日韩.国产.一区.二区| 中国成人在线视频| 黄色av一区| 亚洲性图久久| 日韩午夜免费| 久久激情一区| 欧美午夜在线| 夜夜爽av福利精品导航| 亚洲欧美久久久久一区二区三区| 亚洲男女自偷自拍| 午夜精品亚洲一区二区三区嫩草| 在线观看成人av电影| 久久国产福利| 国产综合激情| 午夜一区二区三视频在线观看| 欧美一区二区三区免费看| 欧美成人dvd在线视频| 激情综合激情| 美女精品在线| 在线精品在线| 欧美久久一区| 羞羞视频在线观看欧美| 久久国产精品久久w女人spa| 国产精品v欧美精品v日韩精品| 在线观看一区| 亚洲欧美日韩精品久久久| 老牛嫩草一区二区三区日本| 亚洲视频综合| 国模精品娜娜一二三区| 国产精品免费一区二区三区观看| 午夜精品区一区二区三| 亚洲美女一区| 欧美日本不卡高清| 亚洲第一黄色| 欧美福利网址| 毛片一区二区| 午夜一区二区三区不卡视频| 激情亚洲成人| 欧美国产三级| 久久综合九色综合久99| 午夜在线一区二区| 中日韩视频在线观看| 激情亚洲成人| 国产自产精品| 欧美日韩精品久久| 久久久777| 免费在线国产精品| 国产精品夜夜夜| 日韩一级欧洲| 精品动漫一区| 影音先锋中文字幕一区| 国产精品草草| 欧美精品麻豆| 欧美一区二区三区久久精品茉莉花| 久久久亚洲人| 久久久精品网| 美女国产一区| 午夜亚洲影视| 久久精品导航| 久久一二三区| 欧美影视一区| 免费日韩av片| 久久黄色网页| 欧美伊人影院| 欧美日一区二区三区在线观看国产免| 欧美暴力喷水在线| 欧美久久九九| 好看的日韩av电影| 在线播放豆国产99亚洲| 亚洲精品欧洲精品| 国产精品一区二区在线观看| 午夜在线观看免费一区| 久久久xxx| 欧美日韩国产亚洲一区| 伊人精品在线| 在线视频免费在线观看一区二区| 亚洲精品美女| 久久婷婷亚洲| 激情欧美日韩一区| 国产精品一卡| 欧美精品色网| 国产日韩欧美一区二区| 久久综合一区| 亚洲经典在线看| 亚洲一区精彩视频| 欧美精选一区| 国产精品腿扒开做爽爽爽挤奶网站| 美女网站久久| 国内成人在线| 国产精品一区二区欧美| 欧美日韩一区在线视频| 一区二区三区欧美在线| 亚洲欧美大片| 久久婷婷一区| 亚洲激情一区| 久久久综合香蕉尹人综合网| 国产中文一区| 国产精品美女久久久| 欧美日韩国产高清| 一本一本久久a久久精品综合妖精| 免费亚洲视频| 亚洲国产一区二区精品专区| 亚洲一区不卡| 狠狠88综合久久久久综合网| 亚洲一区3d动漫同人无遮挡| 精品99视频| 欧美一区在线看| 国产精品久久久久9999高清| 亚洲性图久久| 亚洲欧美一级二级三级| 午夜在线精品偷拍| 日韩视频一区二区三区在线播放免费观看| 老色鬼久久亚洲一区二区| 国产偷久久久精品专区| 在线视频观看日韩| 国产精品观看| 午夜精品久久| 久久五月激情| 久久精品国产第一区二区三区最新章节 | 国产日韩欧美一区二区| 国产私拍一区| 欧美日韩精品免费看| 午夜亚洲视频| 亚洲一区二区精品在线| 亚洲黄色大片| 精品91视频| 黑丝一区二区三区| 午夜精品婷婷| 欧美精品一区二区视频| 欧美激情视频一区二区三区在线播放 | 国产一区在线免费观看| 欧美日韩精品免费看| 欧美激情第二页| 欧美成人综合一区| 欧美影院一区| 欧美精品1区| 欧美日韩成人一区二区三区| 欧美精品啪啪| 精品91在线| 亚洲日本免费| 国产精品亚洲产品| 久久精品五月| 欧美不卡福利| 久久国产福利| 欧美激情1区2区| 国产精品99免费看| 亚洲国产精品一区二区第四页av| 亚洲经典在线看| 国产午夜精品在线| 欧美一区二区视频在线| 欧美午夜影院| 夜夜嗨一区二区| 久久精品日韩| 很黄很黄激情成人| 国产一区二区三区久久| 欧美69视频| 国内久久精品| 国产精品久久久亚洲一区| 亚洲免费影院| 国外成人免费视频| 亚洲一区二区在线免费观看| 欧美一区免费| 影音先锋在线一区| 美女日韩在线中文字幕| 伊人激情综合| 久久久久久九九九九| 欧美日韩一区二区视频在线观看 | 国产精品久久亚洲7777| 欧美国产专区| 国产日产高清欧美一区二区三区| 欧美专区18| 亚洲精品裸体| 欧美成人嫩草网站| 一本色道久久综合亚洲精品不| 女同性一区二区三区人了人一| 亚洲欧洲视频| 久久在线91| 国产私拍一区| 亚洲人www| 国产精品chinese| 久久久精品午夜少妇| 亚洲美女视频在线免费观看| 国内精品福利| 欧美日韩亚洲一区二区三区四区| 麻豆av一区二区三区| 在线一区日本视频| 黄色亚洲大片免费在线观看| 老妇喷水一区二区三区| 亚欧成人精品| 亚洲综合丁香| 国产精品腿扒开做爽爽爽挤奶网站| 亚洲一级网站| 国产精品xxx在线观看www| 久久先锋影音| 欧美亚洲免费在线| 国产精品有限公司| 一区二区三区四区国产| 亚洲精选91| 亚洲国产网站| 在线 亚洲欧美在线综合一区| 欧美日韩免费高清| 欧美另类高清视频在线| 你懂的网址国产 欧美| 久久久久高清| 亚洲欧美综合| 欧美1级日本1级| 午夜欧美精品久久久久久久| 欧美精品在线一区| 国产精品国产精品| 在线成人欧美| 夜夜嗨一区二区三区| 一区二区三区偷拍| 亚洲欧美日韩在线观看a三区| av不卡在线看| 国产精品久久九九| 国产精品一二| 国产精品亚洲综合久久| 亚洲毛片网站| 亚洲美洲欧洲综合国产一区| 99香蕉国产精品偷在线观看| 国产日韩精品一区观看 | 中文亚洲字幕| 久久欧美肥婆一二区| 欧美韩日精品| 亚洲全部视频| 免费日韩av| 老牛嫩草一区二区三区日本| 欧美日韩在线不卡一区| 亚洲三级观看| 久久久天天操| 影音先锋久久资源网| 亚洲免费在线| 亚洲午夜黄色| 午夜在线一区二区| 亚洲私人影院| 午夜影院日韩| 在线国产日韩| 欧美在线91| 国产一区二区三区黄| 欧美日韩专区| 久久大逼视频| 亚洲人成免费| 欧美体内she精视频在线观看| 亚洲激情精品| 欧美激情 亚洲a∨综合| 一本色道久久精品| 欧美精品三级| 亚洲欧美日韩视频二区| 一区在线电影| 久久欧美肥婆一二区| 在线视频观看日韩| 欧美国产综合| 久久精品二区三区| 中日韩男男gay无套| 亚洲图片在线观看| 午夜精品影院| 久久蜜桃资源一区二区老牛| 一区二区三区成人精品| 在线国产日韩| 国外成人免费视频| 欧美精品麻豆| 久久精品网址| 免费亚洲一区二区| 国产欧美日韩一区| 欧美搞黄网站| 国产亚洲欧美另类一区二区三区| 黄色亚洲在线| 黑人巨大精品欧美一区二区小视频| 久久久青草婷婷精品综合日韩 | 亚洲女人av| 99国产精品私拍| 激情视频一区二区| 一区二区在线不卡| 精品动漫一区| 亚洲成人自拍视频| 国产一区二区三区四区老人| 欧美一区2区三区4区公司二百| 午夜在线一区二区| 免费在线亚洲| 老**午夜毛片一区二区三区| 久久精品女人| 亚洲欧美综合| 国语精品一区| 亚洲国产高清一区二区三区| 亚洲黄色av| 国产视频一区免费看| 香蕉成人久久| 久久青青草综合| 欧美精品一区二区视频 | 在线免费观看欧美| 亚洲黄页一区| 中国成人亚色综合网站| 亚洲欧美网站| 欧美三级乱码| 亚洲国产美女| 国产欧美日韩在线播放| 免费在线一区二区| 国产一区免费视频| 国产欧美一区二区三区另类精品| 国产乱人伦精品一区二区| 美女久久一区| 国产在线欧美日韩| 国产一区二区精品| 久久亚洲精选| 亚洲国产日韩在线| 欧美一级久久| 亚洲一二区在线| 亚洲专区欧美专区| 国产精品99免费看| 国产伦精品一区二区| 国产精品va| 香蕉精品999视频一区二区| 欧美精品尤物在线| 最新日韩av| 乱码第一页成人| 亚洲福利免费| 久久久久久9| 91久久精品国产91久久性色tv| 媚黑女一区二区| 在线欧美日韩| 欧美日本精品| 亚洲男人影院| 亚洲精选一区| 欧美日韩四区| 久久国产成人| 一区二区动漫| 国产综合激情| 美女诱惑一区| 国产精品有限公司| 最新亚洲视频| 国内激情久久| 欧美黄污视频| 久久亚洲影院| 久久国产欧美精品| 亚洲一区二区三区免费观看| 伊人蜜桃色噜噜激情综合| 欧美福利电影在线观看| 亚洲中字黄色| 一区二区三区精品视频在线观看| 国产在线欧美日韩| 欧美日本亚洲韩国国产| 老妇喷水一区二区三区| 美女精品网站| 美女久久一区| 亚洲欧美春色| 亚洲欧美久久久| 国产伦理一区| 亚洲一区二区三区高清| 99在线精品视频在线观看| 在线观看不卡| 亚洲国产高清视频| 亚洲高清av| 在线精品福利| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲婷婷在线| 在线观看欧美一区| 亚洲国产美女| 99re热精品| 国产亚洲亚洲| 免费不卡亚洲欧美| 久久婷婷一区| 欧美天堂亚洲电影院在线观看 | 国产精品久久777777毛茸茸| 99亚洲伊人久久精品影院红桃| 国产综合网站| 黑人巨大精品欧美一区二区小视频| 国产精品yjizz| 亚洲国产三级| 国产精品久久久久久久久久直播| 国产精品一区二区三区四区五区| 亚洲一区二区免费看| 久久电影一区| 欧美久久影院| 91久久视频| 国产女主播一区二区三区| 午夜在线精品| 国产精品v一区二区三区| 亚洲激情啪啪| 久久xxxx| 影音先锋亚洲电影| 国产精品一区在线播放| 久久久夜精品| 亚洲国产精品一区二区第一页| 国产精品久久久久久久久久妞妞| 久久久久久久久久久一区| 欧美天堂亚洲电影院在线观看| 亚洲伦伦在线| 美女诱惑一区| 亚洲欧洲日本国产| 久久久久一区二区| 在线看片成人| 久久精品亚洲一区二区| 亚洲天堂激情| 美女视频一区免费观看| 激情欧美日韩| 美女久久一区| 亚洲精品色图| 欧美高清视频一区| 在线亚洲自拍| 国产综合色产|